2014-05-16 80 views
2

這個問題是關於去語言測試。你可能知道大多數主流語言都有自己的xUnit框架。這些框架中的大多數都能夠監聽測試運行事件(例如,測試用例已啓動,測試用例已完成,測試失敗等)。這通常稱爲測試事件監聽器,主要用於編寫框架的第三方擴展。Go lang測試事件監聽器?

我的問題:是否有任何類似的方式附加到標準的Go語言測試框架事件(http://golang.org/pkg/testing/)?

回答

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

這是完全未經測試(嘿嘿),但它應該是比較接近你想要什麼。它旨在每個測試只需要一個或兩個額外的方法調用來連接調度代碼。

+0

它不會在測試邏輯中創建大量的複製粘貼嗎?我正在尋找一個入口點,如JUnit RunListener http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html。 –

+1

@ vania-pooh你不會得到一個簡單的解決方案,因爲這樣的東西只是沒有集成到'go test'框架中。任何解決方案都需要一點額外的鉤住你自己。 – LinearZoetrope

+0

沒問題,但就我們實施測試報告而言,主要想法是確保爲了使用此報告,任何人都應該在他的測試中進行最小數量的更改。 –

1

不是我所知道的。這將有助於瞭解你正在努力完成什麼,以便你需要這種能力?

+0

«...主要用於編寫框架的第三方擴展。»?如果有人打算爲類固醇編寫Go的單元測試軟件包,這將是一個直截了當的問題。另一方面,如果有人寫這樣的框架,他們完全可以控制他們的測試用例的生命週期...... – kostix

+0

我們正在製作一份測試報告,並且首次嘗試爲Go實現數據收集適配器。主要思想是能夠收集以下事件:測試套件啓動,測試用例方法啓動,測試套件完成等。 –