2008-09-18 88 views
35

我堅信使用單元測試是構建大型多平臺應用程序的一部分。我們目前正在計劃在單獨的項目中進行單元測試。這有利於保持我們的代碼基礎清潔。不過,我認爲這會將測試代碼與實施單元分開。你對這種方法有什麼看法?有沒有像C++應用程序的JUnit這樣的工具?如何在大型C++項目中實現單元測試?

+0

有一個剛剛被問到的非常類似的問題。看看[CppUnit](http://cppunit.sourceforge.net),[CppUnitLite](http://www.objectmentor.com/resources/downloads.html)和「[使用遺留代碼有效工作](http:/ /www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052)「(全部由Michael Feathers – 2008-09-18 11:20:54

回答

15

有許多測試單元frameforks爲C++。 CppUnit肯定不是我會選擇的(至少在它的穩定版本1.x中,因爲它缺少很多測試,並且需要大量的冗餘代碼行)。 到目前爲止,我的首選框架是CxxTest,我計劃在某天評估Fructose

任何方式,也有一些 「文件」 是評價C++ TU框架:

+0

與JUnit不同,更適合C++:[CATCH](https://github.com/philsquared/Catch)。 – 2016-02-03 09:52:50

11

這是一個合理的方法。

我已經都與UnitTest++Boost.Test

我已經看了CppUnit的很好的效果,但對我來說,感覺更像是JUnit的東西不是一些針對C++的轉換。

更新:這幾天我更喜歡使用Catch。我發現它是有效和簡單的使用。

+3

[doctest](https://github.com/onqtam/doctest)是我重新實現注重編譯速度 - 檢出[FAQ](https://github.com/onqtam/doctest/blob/master/doc/markdown/faq.md#how-is-doctest-different-from-catch )看他們在哪些方面不同 – onqtam 2016-10-10 19:43:54

1

CppUnit的是Junit的用於C++應用 http://cppunit.sourceforge.net/cppunit-wiki

個人的直接等同物,我創建在一個不同的項目的單元測試,並創建了內置所有的單元測試和依賴源代碼單獨生成配置。在某些情況下,我想測試一個類的私有成員函數,所以我使Test類成爲要測試的對象的一個​​朋友類,但是當通過預處理器聲明構建「非測試」配置時隱藏了朋友聲明。

但是我最終做了這些編碼體操,因爲我在將測試集成到遺留代碼中。如果您開始進行單元測試,更好的設計可能很簡單。

1

您可以爲該庫的子目錄中源樹中的每個庫創建單元測試項目。您最終會爲每個庫提供一個測試驅動程序應用程序,這使得運行一套測試變得更加容易。通過將它們放在一個子目錄中,它可以保持代碼基本清潔,但也會使測試接近代碼。

可以輕鬆編寫腳本來運行源代碼樹中的所有測試套件並收集結果。

我已經使用原始CppUnit的定製版本多年,並取得了巨大成功,但現在還有其他替代方案。 GoogleTest看起來很有趣。

1

我認爲你的單元測試的正確路徑和它的一個偉大的計劃,以提高您的產品的可靠性。

雖然在將應用程序轉換到不同的平臺或甚至不同的操作系統時,單元測試並不能解決所有的問題。原因在於,流程單元測試會在您的應用程序中發現錯誤。它只是簡單地將盡可能多的輸入引入系統,並等待另一端的結果。就像讓一隻猴子不停地敲擊鍵盤並觀察結果一樣(Beta測試者)。

要進入下一步,通過良好的單元測試,您需要專注於您的應用程序的內部設計。我發現的最佳方法是使用稱爲「合同編程」或「按合同設計」的設計模式或設計過程。另一本對於在你的核心設計中構建可靠性非常有幫助的書是。

調試開發過程:保持專注,打船日期和建立實體團隊的實用策略。

在我們的開發團隊中,我們仔細研究了我們認爲是程序員錯誤,開發人員錯誤,設計錯誤以及如何使用單元測試以及通過DBC構建軟件包的可靠性以及遵循建議調試開發過程。

1

CxxTest也值得一看,爲C++輕量級,易於使用的跨平臺JUnit/CppUnit/xUnit-like框架。我們覺得很簡單的添加和開發測試

Aeryn是另一個C++測試框架值得一看

2

我使用單元測試++。測試在一個單獨的項目中,但實際的測試與實際的代碼交織在一起。它們存在於被測部分下的文件夾中。 即:
MyProject的\ SRC \ < - 實際應用
MyProject的源的\ src \測試< - 測試的源
如果您有嵌套的文件夾(誰不),那麼他們也會有自己的擁有\測試子目錄。

+0

我們也這樣做,我們的構建系統會自動構建測試EXE的代碼可以在任何unittest源文件夾下找到。 – 2008-09-29 12:24:15

3

您應該將您的基本代碼分隔到共享(動態)庫,然後爲此庫編寫單元測試的主要部分。

兩年前(2008)我參與了Linux基金會部署的大型LSB Infrastructure項目。該項目的目標之一是爲Linux核心庫編寫40.000函數的單元測試。在該項目的上下文中,我們創建了AZOV technology和基本工具API Sanity Autotest,以便自動生成所有測試。您可以嘗試使用此工具爲您的基本庫生成單元測試。

相關問題