我想用GTest來測試我的代碼,但困擾我的事情之一是它總是被編譯進來。這會減慢我的發佈版本。 GTest測試看起來像這樣「Comment」out宏函數定義
TEST(CaseName, TestName)
{
ASSERT_EQ(3, 3);
}
我希望能夠通過簡單的定義將所有測試註釋掉。我可以在#ifdef
的每個測試中包裝,但這真的很難看。我想不包含GTest頭文件,而是以一種擺脫測試的方式自己定義TEST。
我到目前爲止。
我有一個宏將其定義爲一個靜態函數,所以它應該被優化出來,但測試中的assert
仍然被編譯(並且是未定義的)。這意味着我還必須定義每一個ASSERT
和EXPECT
,這至少是很乏味的。
#define TEST(tcase, test) static void uselessFunction##tcase##_##test(void)
我可以棒的,但我更希望的東西更好。希望有一些宏魔術師可以幫助。
你爲什麼重新發明輪子 - assert和NDEBUG #define有什麼問題? – 2012-08-07 01:56:07
這就是我要去的,但GTest有一些很好的功能,比如自動運行,漂亮的打印(能夠看到實際值是殺手)。我使用'assert'和一個腳本來掃描我的源代碼以獲得特殊格式的測試名稱(所以我不必保留一個列表),但GTest更好。 – 2012-08-07 02:35:42
聽起來很公平 - 我喜歡cppunit - 但我認爲它今天可能有點過時。儘管在現代機器上編譯時間應該是你最後的擔心。類的轉發可以幫助加快速度,但是現在我可以在不到一分鐘的時間內編譯100,000行代碼。 CPU時間是這個星球上最便宜的東西 – 2012-08-07 02:42:15