我需要做这样的事情:多个操作系统单元在一个文件中测试 - 可能吗?
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' –