我在使用 Visual Studio 2012 的 Google 测试中遇到了这个奇怪的问题。我可以成功设置测试并且它们运行得很好。但是,当我更改测试项目中的任何代码并构建项目时,我会收到 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(),最后构建中包含的测试仍然会运行。如果我进行更改并再次构建,则不会运行任何测试。
我对这个问题很困惑。即使在我清理并重建项目之后,这个问题仍然会发生。
以前有其他人遇到过这个问题吗?非常感谢!