代码之家  ›  专栏  ›  技术社区  ›  user2749716

c++Google测试运行两次

  •  4
  • user2749716  · 技术社区  · 10 年前

    我开始使用GoogleTest对我的代码运行单元测试。我在Ubuntu 12.04上使用Eclipse开普勒。

    我在第一次测试中使用了以下课程:

    所有测试.pp

    #include "gtest/gtest.h"
    #include "SerialManagerTest.cpp"
    
    int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
    }
    

    串行管理器测试.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.
    

    为什么每个测试都要处理两次?

    1 回复  |  直到 10 年前
        1
  •  2
  •   mockinterface    10 年前

    你为什么 包括 翻译单元中的翻译单元?

    #include "SerialManagerTest.cpp"
    

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

    很可能发生的情况(没有看到命令行)是,由于最终可执行文件中的include,SerialManagerTest代码链接了两次。也就是说,它在 AllTests.o SerialManagerTest.o ,并且两个对象都链接到最终的测试可执行文件中。