Go lang测试事件监听器?

时间:2014-05-16 15:32:39

标签: events testing go listener

这个问题是关于 Go语言测试。您可能知道大多数主流语言都有自己的xUnit框架。大多数这些框架都能够监听测试运行事件(例如,测试用例已启动,测试用例已完成,测试失败等)。这通常称为测试事件监听器,主要用于编写框架的第三方扩展。

我的问题:是否有任何类似的方法可以附加到标准Go语言测试框架事件(http://golang.org/pkg/testing/)?

3 个答案:

答案 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,您可以解析测试输出并将其发送到第三方框架。