2011-03-17 158 views
49

所以我喜歡並喜歡使用Google Test來參與我參與的C++項目。我只是提出了一個新的項目,它將是直線C(一個庫),目前爲止看不到任何即使它是一個C++框架,爲什麼不繼續使用Google Test。有一個C++編譯器可用不會是一個問題。Google測試是否可以測試C代碼?

爲什麼我不應該使用Google Test來測試直接的C代碼有特定的原因嗎?

謝謝。

+1

我可以理解你爲什麼想這樣做,gtest是相當吝嗇的。很好的問題。 – 2011-05-14 10:37:14

回答

1

我無法命名一個。我想會有一些你在「普通」C中沒有的東西。例如,我認爲TestCase是從某個類派生的。但是在測試中,你可以測試任何你喜歡的東西,爲什麼不選擇C呢?

12

作爲所有Google的C++代碼,Google Test不會使用異常,所以異常安全流程不會成爲問題。只要你的頭文件是C++兼容的(不使用C++關鍵字,用正確的鏈接導出符號),它應該沒問題。

2

傑森, 意識到這一點! :D

正如Meekrosoft所說,是的,這是可能的。當我試圖這樣做時,我也使用了他的網站。它的工作原理,但有一個大問題:

GTest是反對導向的工具和C語言不是!

在例如,在GTEST你有很多的功能(全API的80%),這一請求對象作爲參數,例如:

EXPECT_CALL(turtle, PenDown())    // turtle is object(class) and PenDown() is method of that object 
     .Times(AtLeast(1)); 

從GTEST網站https://code.google.com/p/googlemock/wiki/ForDummies 所以你只需要使用宏像expect_equal,expect_bigger_than等...

我想建議你的工具CMocka(或其他一些C單元測試工具)。它也來自谷歌(由非谷歌開發人員組修改),它直接爲C語言創建。當我想測試C型源代碼時,我使用這個。

我希望這有助於.. :-)有一個愉快的一天.. :-)

+3

EXPECT_CALL未在GoogleTest中定義,但在GoogleMock(一個模擬框架 - 不是單元測試框架)中定義。 GoogleTest定義了像EXPECT_EQ和EXPECT_TRUE這樣的宏,它們非常適合單元測試程序(非OO)代碼。我目前正在將它用於一個項目,並且它工作正常。 – weberc2 2015-03-14 18:08:42

1

我只是想我要補充另外一點:因爲GTEST是C++,你會下解析您的C頭文件測試爲C++。這意味着測試並不能保證頭文件可以從C使用。我最近用一個正在構建的C庫來解決這個問題。