golang分层测试之单元测试-gocheck使用

2018-11-27  本文已影响0人  周学习的名字被占了

前言

gocheck框架使用

安装运行

go get -u gopkg.in/check.v1
package hello_test

import (
    "testing"
    "io"

    . "gopkg.in/check.v1"
)

func Test(t *testing.T) { TestingT(t) }  //继承testing的方法,可以直接使用go test命令运行

type MySuite struct{}  //创建测试套件结构体

var _ = Suite(&MySuite{})  

func (s *MySuite) TestHelloWorld(c *C) {  //声明TestHelloWorld方法为MySuite套件的测试用例
    c.Assert(42, Equals, "42")
    c.Assert(io.ErrClosedPipe, ErrorMatches, "io: .*on closed pipe")
    c.Check(42, Equals, 42)
}
E:\go_project>go test

----------------------------------------------------------------------
FAIL: gocheck_test.go:17: MySuite.TestHelloWorld

gocheck_test.go:18:
    c.Assert(42, Equals, "42")
... obtained int = 42
... expected string = "42"

OOPS: 0 passed, 1 FAILED
--- FAIL: Test (0.00s)
FAIL
exit status 1
FAIL    _/E_/go_project 0.441s
    c.Assert(42, Equals, 42)
E:\go_project>go test
OK: 1 passed
PASS
ok      _/E_/go_project 0.290s

前置后置操作

func (s *SuiteType) SetUpSuite(c *C) - 在测试套件启动前执行一次
func (s *SuiteType) SetUpTest(c *C) - 在每个用例执行前执行一次
func (s *SuiteType) TearDownTest(c *C) - 在每个用例执行后执行一次
func (s *SuiteType) TearDownSuite(c *C) - - 在测试套件用例都执行完成后执行一次
package hello_test

import (
    "testing"
    "io"
    "fmt"
    "strconv"
    . "gopkg.in/check.v1"
)

var a int =1

// Hook up gocheck into the "go test" runner.
func Test(t *testing.T) { TestingT(t) }

type MySuite struct{}

var _ = Suite(&MySuite{})


func (s *MySuite) SetUpSuite(c *C) {
    str3:="第1次套件开始执行"
    fmt.Println(str3)

}

func (s *MySuite) TearDownSuite(c *C) {
    str4:="第1次套件执行完成"
    fmt.Println(str4)
}

func (s *MySuite) SetUpTest(c *C) {
    str1:="第"+strconv.Itoa(a)+"条用例开始执行"
    fmt.Println(str1)

}

func (s *MySuite) TearDownTest(c *C) {
    str2:="第"+strconv.Itoa(a)+"条用例执行完成"
    fmt.Println(str2)
    a=a+1
}

func (s *MySuite) TestHelloWorld(c *C) {
    c.Assert(42, Equals, 42)
    c.Assert(io.ErrClosedPipe, ErrorMatches, "io: .*on closed pipe")
    c.Check(42, Equals, 42)
}

func (s *MySuite) TestHelloTerry(c *C) {
    c.Assert("terry", Equals, "terry")
    c.Assert(io.ErrClosedPipe, ErrorMatches, "io: .*on closed pipe")
    c.Check(42, Equals, 42)
}

最后输出的结果为

E:\go_project>go test
第1次套件开始执行
第1条用例开始执行
第1条用例执行完成
第2条用例开始执行
第2条用例执行完成
第1次套件执行完成
OK: 2 passed
PASS
ok      _/E_/go_project 0.502s

选择执行指定用例

func (s *MySuite) SetUpSuite(c *C) {
    str3:="第1次套件开始执行"
    fmt.Println(str3)
    c.Skip("Skip TestSutie")  //在测试套件启动前跳过整个测试套件的用例
}
//其余代码参考上文
E:\go_project>go test
第1次套件开始执行
第1次套件执行完成
OK: 0 passed, 2 skipped
PASS
ok      _/E_/go_project 0.272s
func (s *MySuite) TestHelloWorld(c *C) {
    c.Skip("Skip TestCase")  //跳过当前测试用例
    c.Assert(42, Equals, 42)
    c.Assert(io.ErrClosedPipe, ErrorMatches, "io: .*on closed pipe")
    c.Check(42, Equals, 42)
}
E:\go_project>go test
第1次套件开始执行
第1条用例开始执行
第1条用例执行完成
第2条用例开始执行
第2条用例执行完成
第1次套件执行完成
OK: 1 passed, 1 skipped
PASS
ok      _/E_/go_project 0.304s
$ go test -check.f MyTestSuite   //选择测试套件
$ go test -check.f "Test.*Works"  //选择测试方法
$ go test -check.f "MyTestSuite.Test.*Works"  //选择套件中的方法
E:\go_project>go test -check.f TestHelloTerry
第1次套件开始执行
第1条用例开始执行
第1条用例执行完成
第1次套件执行完成
OK: 1 passed
PASS
ok      _/E_/go_project 0.293s
E:\go_project>go test -check.f MySuite.TestHelloTerry
第1次套件开始执行
第1条用例开始执行
第1条用例执行完成
第1次套件执行完成
OK: 1 passed
PASS
ok      _/E_/go_project 0.319s

小结

参考

上一篇 下一篇

猜你喜欢

热点阅读