我正在尝试使用 gocheck测试我的代码。我用以下示例(类似于他们网站提供的示例)指导自己:
package hello_test
import (
"testing"
gocheck "gopkg.in/check.v1"
)
// Hook up gocheck into the "go test" runner.
func Test(t *testing.T) {
gocheck.TestingT(t)
}
type MySuite struct{} //<==== Does the struct have to be named that way, what if we have multiple of these and register them, is it a problem?
var _ = gocheck.Suite(&MySuite{}) // <==== What does this line do?
func (s *MySuite) TestHelloWorld(c *gocheck.C) {
c.Assert(42, gocheck.Equals, "42")
c.Check(42, gocheck.Equals, 42)
}
但是,即使阅读了文档,我也不确定是否理解某些行。为什么需要行 type MySuite struct{}
甚至更有趣的行,为什么需要 var _ = gocheck.Suite(&MySuite{})
?第一个,很容易推断出可能必须首先声明该结构并创建函数,如果使用如图所示的签名实现,这些函数将运行测试。然而,第二行打败了我。我真的不知道为什么需要它。文档说:
Suite registers the given value as a test suite to be run. Any methods starting with the Test prefix in the given value will be considered as a test method.
但是,很多事情我都不确定。例如,如果我在同一文件中使用多个 MySuite 结构运行此函数,是否会出现问题? MySuite struct
类型有什么特别之处吗?即使注册了一些不同的结构,gocheck 测试套件还能工作吗?基本上,我们可以在一个文件中注册一个结构多少次并且它仍然有效?
最佳答案
gocheck.Suite
函数具有将给定套件值注册到 gocheck 包的副作用。在内部,它只是将套件添加到一部分已注册的测试套件中。您可以通过以下方式获得相同的效果:
func init() {
gocheck.Suite(&MySuite{})
}
任何一种形式都应该有效,所以这只是风格问题。
注册测试套件中的测试在您调用 gocheck.TestingT
时运行。您在名为 Test
的测试中执行此操作,Go 的测试框架将选取该测试。这就是将 gocheck 测试集成到测试框架中的方式。请注意,您只需调用一次 TestingT
即可运行所有测试套件:而不是每个测试套件都调用一次。
关于unit-testing - 使用gocheck测试go(golang)代码,suite功能如何使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24399104/