fro*_*rik 14 unit-testing go code-readability
我习惯试驾我的代码.现在我是Go的新手,我正试图尽快做到正确.我在标准库中使用测试包似乎已经足够好了.(我也喜欢它不是另一个外部依赖.我们目前总共有2个依赖项 - 与任何Java或Ruby项目相比.....)无论如何 - 看起来像golang中的断言看起来像这样:
func TestSomething(t *testing.T) {
something := false
if something {
t.Log("Oh noes - something is false")
t.Fail()
}
}
Run Code Online (Sandbox Code Playgroud)
我觉得这个很冗长,而且想在一行上做:
Assert( something, "Oh noes - something is false" )
Run Code Online (Sandbox Code Playgroud)
或类似的东西.我希望我在这里错过了一些明显的东西.什么是最佳/惯用的方式去做?
更新:只是为了澄清.如果我要做这样的事情:
func AssertTrue(t *testing.T, value bool, message string) {
if value {
t.Log(message)
t.Fail()
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样写我的测试
func TestSomething(t *testing.T) {
something := false
AssertTrue(t, something, "Oh noes - something is false")
}
Run Code Online (Sandbox Code Playgroud)
那么它会不会是去的方式来做到这一点?
Gus*_*yer 16
有外部包可以与库存测试框架集成.
我很久以前写过的其中一个,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")
}
Run Code Online (Sandbox Code Playgroud)
你会像往常那样运行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"
Run Code Online (Sandbox Code Playgroud)
请注意代码上方的注释是如何包含在报告的失败中的.
还有许多其他常用功能,例如套件和特定于测试的设置和拆除例程等.请查看网页了解更多详情.
它很好地维护,因为我和其他人在一些活跃的项目中使用它,所以随时加入船上,或跟进并检查其他类似的项目,更适合你的口味.
对于gocheck使用的例子,请看看包装,如氧化镁,goyaml,goamz,管,VCLOCK,朱朱(大规模的代码库),LPAD,gozk,goetveld,墓等.此外gocheck,管理,测试本身.引导它是非常有趣的.