2014-02-25 123 views
4

我開始使用Google Test對我的代碼運行單元測試。我在Ubuntu 12.04上使用Eclipse Kepler。C++ Google測試運行兩次

我使用的是第一次測試的類:

AllTests.cpp

#include "gtest/gtest.h" 
#include "SerialManagerTest.cpp" 

int main(int argc, char **argv) { 
::testing::InitGoogleTest(&argc, argv); 
return RUN_ALL_TESTS(); 
} 

SerialManagerTest.cpp

#include "gtest/gtest.h" 
#include "SerialManager.h" 
#include "SerialInterface.h" 
#include "FakeSerialHandler.h" 

namespace { 

TEST(TestingSerialManager, FirstTest) { 
    SerialInterface *fakeSerialHandler=new FakeSerialHandler(); 
    SerialManager* serialManager=new SerialManager(fakeSerialHandler); 
    ASSERT_TRUE(serialManager->OpenPort()); 

    delete serialManager; 
} 

TEST(TestingSerialManager, SecondTest) { 
SerialInterface *fakeSerialHandler=new FakeSerialHandler(); 
SerialManager* serialManager=new SerialManager(fakeSerialHandler); 
ASSERT_FALSE(!serialManager->OpenPort()); 

delete serialManager; 
} 
} 

當我進行的測試,我得到這個輸出

[==========] Running 4 tests from 1 test case. 
[----------] Global test environment set-up. 
[----------] 4 tests from TestingSerialManager 
[ RUN  ] TestingSerialManager.FirstTest 
[  OK ] TestingSerialManager.FirstTest (0 ms) 
[ RUN  ] TestingSerialManager.SecondTest 
[  OK ] TestingSerialManager.SecondTest (0 ms) 
[ RUN  ] TestingSerialManager.FirstTest 
[  OK ] TestingSerialManager.FirstTest (0 ms) 
[ RUN  ] TestingSerialManager.SecondTest 
[  OK ] TestingSerialManager.SecondTest (0 ms) 
[----------] 4 tests from TestingSerialManager (2 ms total) 

[----------] Global test environment tear-down 
[==========] 4 tests from 1 test case ran. (3 ms total) 
[ PASSED ] 4 tests. 

爲什麼每個測試都被處理兩次?

+0

匿名命名空間看起來很腥,嘗試沒有它? – PlasmaHH

+0

是的。刪除命名空間會導致多個定義錯誤'TestingSerialManager_FirstTest_Test :: test_info_' – user2749716

+0

這就是你的問題,那麼你有多個測試定義,匿名命名空間通過給它們不同的名字來隱藏這個。 – PlasmaHH

回答

2

爲什麼你包括翻譯單位翻譯單位?

#include "SerialManagerTest.cpp" 

它在某些情況下有它的位置,但通常是不好的做法。

什麼可能發生(沒有看到你的命令行),是你的SerialManagerTest代碼連接兩次,因爲包含在最終的可執行文件中。也就是說,它在AllTests.oSerialManagerTest.o中被複制,並且兩個對象都鏈接到最終的測試可執行文件中。

+0

通過更改爲#include「SerialManagerTest.hpp」 – user2749716