這個問題是關於去語言測試。你可能知道大多數主流語言都有自己的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
沒問題,但就我們實施測試報告而言,主要想法是確保爲了使用此報告,任何人都應該在他的測試中進行最小數量的更改。 –