我需要做這樣的事情:多個操作系統單元在一個文件中測試 - 可能嗎?
void Test::testUnitTest() {
#define OS_MACOSX 1
performUnitTest();
#undef OS_MACOSX
performUnitTest();
}
void Test::performUnitTest() {
CefKeyEvent event;
event.modifiers = CTRL;
event.windows_key_code = KeyboardHander::KeyCodeC;
#ifdef OS_MACOSX
fructose_assert(1==2);
event.modifiers = COMMAND;
#endif
fructose_assert(handler.get()->IsCopyRequest(event));
}
...
bool RealClass::IsCopyRequest(const CefKeyEvent& event) {
#ifdef OS_MACOSX
return IsCOMMANDDown(event.modifiers) && event.character == 'c';
#else
return isCTRLDown(event.modifiers) && event.character == 'c';
#endif
}
當testUnitTest()
被調用時,performUnitTest()
的fructose_assert(1 == 2)永遠不會被調用。在實際的測試中,它總是調用isCTRLDown()方法。這對預處理器指令有意義。問題是,如何使這個實際工作?
_in在真實代碼中,'performUnitTest()'會調用在其邏輯中也使用'#ifdef OS_MACOSX'的類的方法。請提供一個更接近您的_real code_的示例! –
在您構建腳本中,您將根據編譯它的平臺定義一個宏。所以'OS_MACOSX'應該由buildscript定義。然後在你的代碼中(包括單元測試),你會測試這個宏是否被設置。 '#ifdef OS_MACOSX' –