gpt4 book ai didi

unit-testing - 单元测试 - 记录然后失败?

转载 作者:IT老高 更新时间:2023-10-28 13:05:50 27 4
gpt4 key购买 nike

我习惯于试驾我的代码。现在我是 Go 的新手,我正试图尽快把它弄好。我正在使用标准库中的测试包,这似乎已经足够好了。 (我也喜欢它不是另一个外部依赖项。与任何 Java 或 Ruby 项目相比,我们目前总共有 2 个依赖项......)无论如何 - 它看起来像 golang 中的断言看起来像这样:

func TestSomething(t *testing.T) {
something := false
if something {
t.Log("Oh noes - something is false")
t.Fail()
}
}

我觉得这很冗长,并想改为一行:

Assert( something, "Oh noes - something is false" )

或类似的东西。我希望我在这里错过了一些明显的东西。在 go 中最好/惯用的方法是什么?

更新:只是为了澄清。如果我要这样做:

func AssertTrue(t *testing.T, value bool, message string) {
if value {
t.Log(message)
t.Fail()
}
}

然后像这样写我的测试

func TestSomething(t *testing.T) {
something := false
AssertTrue(t, something, "Oh noes - something is false")
}

那么这不是 go 的方式吗?

最佳答案

有一些外部包可以与股票测试框架集成。

其中一个是我很久以前写的,gocheck , 旨在对这种用例进行排序。

有了它,测试用例是这样的,例如:

func (s *Suite) TestFoo(c *gocheck.C) {
// If this succeeds the world is doomed.
c.Assert("line 1\nline 2", gocheck.Equals, "line 3")
}

您可以像往常一样使用 go test 运行它,该检查中的失败将报告为:

----------------------------------------------------------------------
FAIL: foo_test.go:34: Suite.TestFoo

all_test.go:34:
// If this succeeds the world is doomed.
c.Assert("line 1\nline 2", gocheck.Equals, "line 3")
... obtained string = "" +
... "line 1\n" +
... "line 2"
... expected string = "line 3"

注意代码正上方的注释是如何包含在报告的失败中的。

还有许多其他常用功能,例如特定于套件和测试的设置和拆卸例程等。详情请查看网页。

由于我和其他人在许多事件项目中使用它,它得到了很好的维护,因此请随时加入,或跟进并查看其他更适合您口味的类似项目。

gocheck 使用示例请查看 mgo 等包, goyaml , goamz , pipe , vclock , juju (海量代码库),lpad , gozk , goetveld , tomb等。还有 gocheck,设法测试自己。引导它非常有趣。

关于unit-testing - 单元测试 - 记录然后失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18637912/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com