題:
與Visual Studio 2015+兼容的C99單元測試框架
Groo
2016-07-22 13:15:51 UTC
view on stackexchange narkive permalink

是否存在可以輕鬆地與Visual Studio Test Explorer集成的“普通C”的單元測試框架?

由於我想將固件和嵌入式團隊的單元測試引入與我們為.NET應用程序所做的方式類似,我主要關心的是用戶友好性,即編寫測試並獲得測試瀏覽器內的綠燈必須很簡單。

我知道 Microsoft C ++單元測試框架,但是由於該團隊沒有C ++經驗,所以我不確定這樣做是否會順利。根據 Criterion的作者在此 HN線程中:

因為自C99以來C不再是C ++的子集,在很多情況下,嘗試使用C ++進行C語言操作很尷尬,或者使用標準C ++無法實現:

  • 首先,您必須將頭文件包含在 extern“中。 C” 來禁用錯誤處理,那麼您必須確保在所有 void * 轉換通常會完成其工作的地方static_cast所有指針。

  • 此外,除非您決定使用非標準的GNU C ++進行編譯,否則所有依賴於指定的初始化程序和復合文字的接口都將被破壞。

  • 還有更多不兼容之處,例如使用數組參數聲明中的 static const 或在C ++無法識別的宏中使用VLA。

第二個問題是與我們的CI服務器(Bamboo)集成,但是我希望它一旦運行就不會出現任何問題。

二 答案:
Groo
2016-07-27 13:11:17 UTC
view on stackexchange narkive permalink

我們開始使用 Google測試(包括Google Mock)進行一些測試,以使事情進行下去,看看在實踐中會出現哪些問題。這仍然是一個C ++測試框架,因此我的問題仍然存在,但是易於集成,因此我們只需要嘗試一下:

  • 編寫測試非常容易(與其他某些C ++框架相比,管道功能沒有很多)
  • Google測試庫需要先構建一次然後包含在項目中,但是過程相當簡單
  • 擴展for VS2015允許VS集成(在Test Explorer中查看測試,調試單個測試等)
  • 創建jUnit XML報告以允許與Bamboo輕鬆集成。

(2017年更新)

僅進行更新:最後,由於Visual Studio擴展正常,並且僅使用 extern“ C “ 鏈接而不是使用其他C測試框架,而這需要我們自己為VS編寫擴展。

但是,我們決定使用 hippomocks進行模擬因為它是一個單頭模擬框架模擬C函數並與MSVC編譯器一起使用。使用GCC的人可以使用CMocka,但是不能與MSVC一起使用(但是同樣,“ GCC人”可能首先不會使用Visual Studio)。

Mawg says reinstate Monica
2017-02-23 17:07:42 UTC
view on stackexchange narkive permalink

Google測試源自Cmockery C單元測試項目,該項目由Google開源並放棄,現在以 Cmocka的形式存在。

我可以根據個人經驗強烈推薦它。但是,我只在Eclipse中使用過它,而沒有在MSVC中使用過,所以不能保證任何事情。

AFAIK,MSVC將允許您選擇工具鏈,因此您僅將其用於GUI;因此,如果您使用C99編譯器應該沒問題。

我不知道它是否適合Test Explorer,但這可能不是C / C ++的問題,但更有可能資源管理器是否可以解析給定單元測試日誌的輸出。

cmocka支持多種不同的消息輸出格式,例如“測試任何協議”,“子單元”,xUnit XML或原始cmockery輸出格式。

因此,您很有機會。特別是,我希望tge tets資源管理器支持xUnit格式。

我建議花幾個小時進行一個簡單的“ hello,world”測試。

Test Explorer的工作方式是將幾種不同類型的參數傳遞給已構建的可執行文件(即“給我一個測試列表”,“執行特定測試”,“執行所有測試”),所以我認為它不應該編寫適配器是一個問題。但是,使用Cmocka與GoogleTest / GoogleMock相比有什麼優勢嗎?特別是因為GoogleTest已經有了擴展名?
好吧,您指定了“普通C”,所以我去了一個普通的C單元測試系統。我不確定您是否可以使用Google Test(我認為它比較出色),因為它將需要C ++對像作為模擬對象;您將不得不嘗試一下,看看
很好,您是對的,要使用Google Test,我們需要將所有externs和C inlude放在“ extern“ C”`塊內以實現C鏈接,但是除此之外,我們沒有任何重大問題。不過,您回答了這個問題,所以我會接受。
衷心的感謝,如果我知道,甚至花點時間嘗試一下,我也不會急於進入“ cmocka”。那麼,您是否只是假裝要模擬的C函數和結構是C ++類?
由於MSVC不支持`--wrap'和像GCC這樣的弱綁定(我相信cmocka是必需的),我們使用HippoMocks進行模擬,並使用GoogleTest進行測試。 HippoMocks重寫了函數跳轉表以模擬函數,它是您需要包含的單個頭文件,並且似乎可以在不同平台上移植。 [Criterion](https://github.com/Snaipe/Criterion)似乎以相同的方式工作。因此,我們僅使用gtest進行測試,然後在需要時使用HippoMocks進行模擬,並獲得VS Test Explorer的全面支持,可以調試單個測試和類似的東西。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...