unit-testing - 使用gocheck测试go(golang)代码,suite功能如何使用?

标签 unit-testing testing go

我正在尝试使用 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/

相关文章:

parsing - 尝试使用 Golang 在命令行上解析标准输出

python - 在测试中连接 Django 信号处理程序

ruby-on-rails - RSpec 失败(未定义方法 `id' 为 nil :NilClass ) with has_many through model

email - SMTP 错误 : 534 when sending email through gmail in golang app

安卓 Kotlin 测试。 lateinit 属性 _db 尚未初始化

javascript - 如何运行 jhipster javascript 测试用例

go - 如何将字符串转换为 float

javascript - 如何在 Chai 的单元测试中使用 localStorage

CMock - 多重定义

c# - 我可以撤消 NSubstitute 的 Returns() 替换而不重新创建模拟吗?