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

googletest:main()在不同的lib中->未找到测试用例

  •  0
  • Ben  · 技术社区  · 8 年前

    我的vs解决方案中有各种可执行项目,其中包含各种googletest案例。我试图通过一个单独的.lib项目来减少代码,该项目只包含 main() 函数和googletest的初始化代码。然后我可以将此链接到包含实际测试的所有exe项目中:

    所以:

    ---main.cpp in static lib project TESTMAIN---
    
    #include <gtest/gtest.h>
    
    int main(int argc, char* argv[])
    {
        testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }
    

    以及

    ---accounttest.cpp in exe project TESTACCOUNT
    
    #include <gtest/gtest.h>
    
    struct BankAccount
    {
        int m_iBalance;
    
        BankAccount(){}
    };
    
    TEST(AccountTests, BankAccountStartsEmpty)
    {
        BankAccount account;
        EXPECT_EQ(0, account.m_iBalance);
    }
    

    但是,在运行testaccount.exe时,不会拾取单元测试:

    Running main() from gmock_main.cc
    [==========] Running 0 tests from 0 test cases.
    [==========] 0 tests from 0 test cases ran. (0 ms total)
    [  PASSED  ] 0 tests.
    

    当显式添加 主() (使用gtest init代码)到我的exe项目,它确实有效。我的预感是这与链接器有关,但我不确定为什么这不起作用。我仍然希望避免在所有测试项目中添加main+init。

    任何关于如何做好这件事的建议都会非常感谢。

    本

    1 回复  |  直到 8 年前
        1
  •  0
  •   Ben    8 年前

    正如@david和@michal walenciak所指出的,它通过链接gtest_main工作。最后,我想我不需要链接到静态库,而是链接到一个dll。