Google Test不会重置旧测试

时间:2013-08-22 21:47:04

标签: c++ unit-testing visual-c++ googletest

我正在使用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(),那么最后一次构建中包含的测试仍会运行。如果我进行更改并再次构建,则不会运行任何测试。

我对这个问题非常困惑。即使在我清理并重建项目之后,这个问题仍然会发生。

其他人之前遇到过这个问题?非常感谢!

0 个答案:

没有答案