2010-09-08 52 views
1

現在我遇到了一個測試問題, 我們開發了一個使用C++的平臺,這個平臺包括2層,一個是引擎層,另一個是小部件層,我是一個小部件層的開發者, 客戶端應用程序使用的小部件層(這些應用程序是我們的產品),現在的問題是這樣的:如何編寫小部件代碼的單元測試?

1,我們想爲小部件層添加一些單元測試來提高整個平臺的質量和可靠性,但是事實上,這個平臺已經發布了幾個版本,那麼現在什麼樣的單元測試最適合我們的項目呢?要在各種驗證/錯誤輸入/路徑覆蓋/壓力中添加一些單元測試,或添加一些模擬客戶端場景的單元測試?我認爲前者可以很好地提高代碼覆蓋率,但是我也會考慮如果我們能夠模擬客戶端在應用程序中如何使用這些API,那麼這些單元測試對我們的平臺而言可能更有意義,對嗎?

2,正如我之前提到的,我在上面的widget層中,依賴於引擎層,但我們沒有權限引擎層代碼,並且幾乎所有的widget API都可以調用引擎層,所以它是我們很難爲這些api實現好的路徑覆蓋單元測試,因爲我們對引擎層代碼沒有想法(也沒有文檔),但是我仍然想問,有沒有什麼方法,工具或框架可以讓別人寫出高質量的單元測試覆蓋那些黑盒子API的路徑?

+0

我可以建議將標題改爲「如何編寫Widget代碼的單元測試?」或類似的東西。 – 2010-09-08 09:25:58

回答

0

由於您使用了窗口小部件API,並且無法訪問引擎代碼,因此請自行編寫引擎。

使用此引擎測試小部件代碼。引擎可能非常薄,幾乎沒有任何功能,只是最小的欺騙小部件層相信它的工作。

測試引擎甚至可以是實際引擎之上的墊片。如何實現這一點取決於您所處的環境,這取決於您的環境,但在Windows中,DLL可能會將所有調用轉發給「真實」DLL,但首先會將調用記錄到日誌中。

另一種技術:由於您確實可以訪問Widget圖層,並且引擎API非常大,您可以對Widget圖層進行重新編程以僅在某些地方使用「測試圖層」,但在其餘位置使用「測試圖層」 。這可以與墊片技術結合使用。

產生存根或存根引擎

適合(或有)的工具,這取決於語言和環境中,你在工作差異很大。

另見this DirectDraw劈爲靈感,它開始作爲一個薄,記錄墊片在最初的DirectDraw實現上。

+0

好點!這樣我們可以繞過引擎層來測試它!但問題是引擎層過大,無法更換:(甚至假層仍需要非常大的努力,所以沒有任何工具可以幫助做到這一點? – vvvvv810505 2010-09-08 09:07:09

0

你沒有提到你使用的是什麼插件框架,但Qt擁有一個測試框架,允許測試代碼來觸發通常會得到用戶輸入(例如點擊鼠標或按下按鍵)生成相同Qt的信號。有關更多詳細信息,請參閱this

如果您使用的是不同的框架,可能會使用類似的功能。

+0

感謝您的建議 – vvvvv810505 2010-09-17 04:03:05

相關問題