这个问题是关于 Go语言测试。您可能知道大多数主流语言都有自己的xUnit框架。大多数这些框架都能够监听测试运行事件(例如,测试用例已启动,测试用例已完成,测试失败等)。这通常称为测试事件监听器,主要用于编写框架的第三方扩展。
我的问题:是否有任何类似的方法可以附加到标准Go语言测试框架事件(http://golang.org/pkg/testing/)?
答案 0 :(得分:1)
不是我知道的。知道你想要完成什么以便你需要这种能力会有所帮助吗?
答案 1 :(得分:1)
不是开箱即用,但不应该自己操纵。任何名为init
的函数都保证在其他任何函数之前运行,并且对于测试也是如此。
在您的测试文件中:
var listener pkg.EventListener
func init() {
pkg.SetupMyFramework()
listener = pkg.Listener()
}
然后在任何测试中
func TestXxx(t *testing.T) {
listener.Dispatch(pkg.MakeEvent("TestXxx", pkg.TestStarted))
err := DoSomething()
if err != nil {
listener.Dispatch(pkg.MakeEvent("TestXxx", pkg.TestFailed))
t.Fatal("Test failed")
}
listener.Dispatch(pkg.MakeEvent("TestXxx", pkg.TestPassed))
}
当然,您可以根据需要对其进行扩展(使用通道,围绕Fatal
制作包装函数以减少冗长等),但这是您如何集成它的要点
编辑:我在*testing.T
上编写了一个非常简单的包装器,并在此处编写了一个事件调度框架:https://github.com/Jragonmiris/testevents
它完全未经测试(嘿),但它应该与你想要的相对接近。它旨在每次测试只需要一个或两个额外的方法调用来连接调度代码。
答案 2 :(得分:0)
go1.10即将发布,一个新功能是go test -json
(发行说明https://tip.golang.org/doc/go1.10#test)。
使用go test -json
,您可以解析测试输出并将其发送到第三方框架。