我需要用 C++ 做一些简单的测试(以前从未做过)。我在 Visual Studio 2010 工作,遇到了内置的测试选项卡。但我真的不喜欢它,而且对我来说似乎过于复杂了。
我只需要一个自定义的 main() 方法,这样我就可以启动快速控制台应用程序并查看类是否按应有的方式执行。
我决定通过创建一个包装启动器文件来使用预处理器定义来克服这个问题,这将是程序的主要起点。
所以,我的 main.cpp 文件包含:
#define DESIRED_TEST "some_test.cpp"
#ifndef DESIRED_TEST
#include "main_program.cpp"
#else
#include DESIRED_TEST
#endif
main_program.cpp 是运行整个程序的文件(其中包含 main 方法)。如您所见,如果我定义 DESIRED_TEST 并分配一个包含文件,则不包含 main_program.cpp,并且应该只构建测试文件(其中也包含 main 方法)。但是,在编译时,我得到以下输出:
1>main.obj : error LNK2005: _main already defined in some_test.obj
1>main_program.obj : error LNK2005: _main already defined in some_test.obj
1>C:\....... : fatal error LNK1169: one or more multiply defined symbols found
我应该如何告诉编译器程序的主要起点是 main.cpp 并且它应该只根据该文件编译和链接,而忽略所有其他目标文件中的多个定义?
这是我克服这个问题的方法(main.cpp 文件):
#define DESIRED_TEST "some_test.h"
#ifndef DESIRED_TEST
int main(int argc, char *argv[])
{
// main program code here
}
#else
#include DESIRED_TEST
int main() {
FUNCTION_CALL();
}
#endif
some_test.h 文件:
void some_test();
#define FUNCTION_CALL some_test
现在我只需要为每个测试创建新的 some_test.h 和 some_test.cpp 文件并定义函数调用。
我不想在 Visual Studio 中学习测试标准的原因是因为我级别的项目的测试非常简单。我将来可能需要学习它,但是当事情变得非常深入和复杂时,我会学习它。