我正在使用Visual Studio 2012遇到Google Test的这个奇怪问题。我可以成功设置测试并运行得很好。但是,当我更改测试项目中的任何代码并构建项目时,我收到LNK2005错误,如下所示:
Error 3 error LNK2005: "private: virtual void __thiscall writeStreamTest_writeRandomDouble_Test::TestBody(void)" (?TestBody@writeStreamTest_writeRandomDouble_Test@@EAEXXZ) already defined in UtilsTest.obj C:\Users\cye\Desktop\codeCPP\unitTest\unitTest.obj unitTest
但是,当我更改测试名称时,测试再次运行正常。但它不仅在名称更改后运行测试,而且还使用旧名称进行测试。像这样:
[==========] Running 4 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 4 tests from writeStreamTest
[ RUN ] writeStreamTest.writeRandomDouble
[ OK ] writeStreamTest.writeRandomDouble (0 ms)
[ RUN ] writeStreamTest.writeRandomInt
[ OK ] writeStreamTest.writeRandomInt (0 ms)
[ RUN ] writeStreamTest.writeRandomDouble2
[ OK ] writeStreamTest.writeRandomDouble2 (0 ms)
[ RUN ] writeStreamTest.writeRandomInt2
[ OK ] writeStreamTest.writeRandomInt2 (0 ms)
[----------] 4 tests from writeStreamTest (3 ms total)
[----------] Global test environment tear-down
[==========] 4 tests from 1 test case ran. (5 ms total)
[ PASSED ] 4 tests.
看起来最后一次构建中包含的测试将被遗留下来。因此,当我使用相同的测试名称构建代码时,编译器会抱怨已经存在具有相同名称的测试。
如果我尝试注释掉所有测试,然后调用RUN_ALL_TESTS(),那么最后一次构建中包含的测试仍会运行。如果我进行更改并再次构建,则不会运行任何测试。
我对这个问题非常困惑。即使在我清理并重建项目之后,这个问题仍然会发生。
其他人之前遇到过这个问题?非常感谢!