这个问题是关于去语言测试。你可能知道大多数主流语言都有自己的xUnit框架。这些框架中的大多数都能够监听测试运行事件(例如,测试用例已启动,测试用例已完成,测试失败等)。这通常称为测试事件监听器,主要用于编写框架的第三方扩展。Go lang测试事件监听器?
我的问题:是否有任何类似的方式附加到标准的Go语言测试框架事件(http://golang.org/pkg/testing/)?
这个问题是关于去语言测试。你可能知道大多数主流语言都有自己的xUnit框架。这些框架中的大多数都能够监听测试运行事件(例如,测试用例已启动,测试用例已完成,测试失败等)。这通常称为测试事件监听器,主要用于编写框架的第三方扩展。Go lang测试事件监听器?
我的问题:是否有任何类似的方式附加到标准的Go语言测试框架事件(http://golang.org/pkg/testing/)?
不是开箱即用,但它不应该很难自我钻研。任何名为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
这是完全未经测试(嘿嘿),但它应该是比较接近你想要什么。它旨在每个测试只需要一个或两个额外的方法调用来连接调度代码。
不是我所知道的。这将有助于了解你正在努力完成什么,以便你需要这种能力?
«...主要用于编写框架的第三方扩展。»?如果有人打算为类固醇编写Go的单元测试软件包,这将是一个直截了当的问题。另一方面,如果有人写这样的框架,他们完全可以控制他们的测试用例的生命周期...... – kostix
我们正在制作一份测试报告,并且首次尝试为Go实现数据收集适配器。主要思想是能够收集以下事件:测试套件启动,测试用例方法启动,测试套件完成等。 –
go1.10即将发布,并且一个新功能是go test -json
(发行说明https://tip.golang.org/doc/go1.10#test)。
使用go test -json
您可以解析测试输出并将其发送给第三方框架。
它不会在测试逻辑中创建大量的复制粘贴吗?我正在寻找一个入口点,如JUnit RunListener http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html。 –
@ vania-pooh你不会得到一个简单的解决方案,因为这样的东西只是没有集成到'go test'框架中。任何解决方案都需要一点额外的钩住你自己。 – LinearZoetrope
没问题,但就我们实施测试报告而言,主要想法是确保为了使用此报告,任何人都应该在他的测试中进行最小数量的更改。 –