2013-10-07 41 views
0

我在各種地方發現了各種各樣的解決方法,建議編寫自定義main函數,而不是依靠Qt QTEST_MAIN()宏創建單個測試執行,這個執行通過很多不同類別的不同測試。在Qt單元測試中使用很多插槽來測試很多類

糾正我,如果我錯了,但你不能只有一個測試類,並有儘可能多的插槽,你需要測試儘可能多的類,只要你想?只需在插槽的實現中實例化想要測試的所需類,然後在該插槽中運行測試。然後,不同的插槽可能會實例化不同的類並運行不同的測試。單個QTEST_MAIN應該貫穿您所有的插槽測試,所以一切都經過測試,對吧?

下面是一些我讀過有關不使用QTEST_MAIN的替代技術:

https://sites.google.com/a/embeddedlab.org/community/technical-articles/qt/qt-posts/creatingandexecutingasingletestprojectwithmultipleunittests

https://stackoverflow.com/a/12207504/768472

+0

您可以將鏈接發佈到您找到的解決方法嗎?如果不知道人們爲什麼試圖編寫自定義的「主」功能的上下文,就很難回答這個問題。 –

+1

我認爲你的方法是正確的,並會工作。我按照你所描述的方式完成了任務 - 每個測試槽測試不同的類。 – vahancho

+0

@RA。我用幾個鏈接更新了這個問題。 – johnbakers

回答

2

當然,只要你想在你可以有儘可能多的插槽測試班。但是遲早你需要分開測試並將它們分組,因爲你有太多的測試將它們全部放在一個類中。你將不得不創建幾個測試類。

QTEST_MAIN函數的原意是隻運行一個測試。如果你想測試幾個類,你可以獨立完成,你可以把它們放在單獨的測試類中,爲每個類添加一個QTEST_MAIN宏,並將每個類編譯爲一個單獨的可執行文件。優點是如果一個測試用例崩潰,其他測試繼續正常運行。減號是你需要一個測試運行器來運行所有測試並檢查它們的結果,而qtestlib不提供跑步者。您可以編寫自己的跑步者或使用現有的跑步者(example)。

的選項有:

  • 服從QTestLib的範例。將測試分開到不同的可執行文件,以防止由於其他測試而導致測試失敗。
  • 將所有測試存儲在一個類中。如果你的應用程序不是很小,這將是非常不方便的。
  • 使用自定義主函數手動運行所有測試。這不是非常糟糕,但也不方便,因爲您需要手動列出測試類。
  • 使用另一個測試庫。我更喜歡Google Test。它比qtestlib功能強大,它支持死亡測試,它會自動註冊並運行測試並計算結果。谷歌測試中沒有這樣的問題。請注意,您可以使用許多有用的qtestlib功能(如QSignalSpy)以及另一個測試框架。
+0

您可以改用Google Test來代替。我一直在想自動測試報告,聽起來谷歌測試會更好。 – johnbakers