2009-11-25 44 views
8

我想單元測試我的程序(使用C語言),因爲我知道這樣做的好處,因爲它顯示了問題出在哪裏。單元測試 - 如何去做?

我也喜歡黑盒測試,因爲它告訴我程序是否工作(至少對於測試)。

目前,我正在使用Autotest(Autoconf自帶)爲了不添加依賴項。

在這一點上,我不介意使用更好的框架,但問題是我不想使用不同的框架來進行黑盒和單元測試。是否有可能從單元測試框架運行黑盒測試?我真正想要的是很好的日誌輸出,準確地說出了什麼地方出了問題,在哪裏。

我的其他選擇是使用Autotest進行單元測試。問題是沒有框架。我寫了一個小的「測試驅動程序」,它接受要測試的函數的名稱和傳遞給該函數的參數,並調用該函數。問題是我不確定在斷言和輸出函數的返回值之間使用什麼邊界(出於記錄目的,因爲我喜歡Autotest如何給我一個差異)。由於大多數函數都返回列表,所以準備使用具有預期輸出的差異(使用自動測試的expout)會更快。

+0

你的程序用什麼語言編寫? – Mathias 2009-11-25 23:35:35

+0

呃,我不能相信我忘了那個。它以C編寫。 – alternative 2009-11-25 23:38:55

+0

如果你會考慮其他框架,維基百科有一個C的單元測試框架列表:http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C還有一個叫做autounit的產品,它應該與autoconf很好地結合,目前是beta版。 http://autounit.tigris.org/ http://autounit.tigris.org/files/documents/187/171/autounit.html – 2009-11-26 18:42:52

回答

2

是否有可能從單元測試 框架運行 黑盒測試?

是的,你可以用單元測試調用自動測試system(),然後在返回的值上聲明。

但我不會推薦這麼做,因爲單元測試經常執行,它們應該非常快,即以秒爲單位而不是以分鐘測量。

單元測試和集成測試(你叫黑箱測試)用於不同的用途:單元測試驗證的單位代碼(無論這意味着,功能或功能羣)的工作原理是測試符合預期,而集成測試涵蓋了端到端的程序,並將其作爲一個整體進行驗證。因此,通常在代碼中每進行一些更改後都會運行單元測試,尤其是在應用TDD時,而在添加功能時執行集成測試時。

我寧願有一個典型的單元測試程序,帶有斷言和一個集成套件,除了黑箱測試外,還會調用單元測試。

的問題是,我不知道斷言和 輸出函數的返回值之間使用什麼邊界(用於日誌記錄,因爲 我喜歡自動測試將如何給我一個diff)。

斷言沒有任何輸出:或者期望值和實際值相等,沒有任何反應,或者它們不同並且UT框架打印出錯誤消息(預期爲X,實際爲Y)。這是讓電腦做測試的工作。

對於日誌輸出差異,仍然需要手動(直觀地)檢查差異結果(例如:是否有一個項目在列表中丟失或一個額外項目...)。

由於大多數函數返回列表,它是更快使用diff 與預期輸出(expout使用自動測試),以製備。

您可能想編寫一個函數,使用斷言來比較列表。

0

您可能需要使用CTEST,附帶CMake的,跨平臺使系統與許多後端:http://www.cmake.org/Wiki/CMake#CTest

PS:CMake的比自動工具更強大了。

+0

我沒有使用CMake。 – alternative 2009-11-26 20:48:23

+0

你可能會考慮一個開關,直到它不晚:-) – Flavius 2009-11-28 23:03:53