C++ GoogleTest:main()在不同的库中->;未找到测试用例

C++ GoogleTest:main()在不同的库中->;未找到测试用例,c++,visual-c++,googletest,C++,Visual C++,Googletest,我的VS解决方案中有各种可执行项目,其中包含各种GoogleTest案例。我试图通过使用一个单独的.lib项目来减少代码,该项目只包含main()函数和GoogleTest的初始化代码。然后,我可以将其链接到包含实际测试的所有exe项目中: 因此: 当显式地将main()(使用gtest init代码)添加到我的exe项目时,它确实起作用。我的直觉是,这与链接器有关,但我不确定这为什么不起作用。我仍然希望避免在所有测试项目中添加main+init 如果您有任何关于如何做到这一点的建议,我们将不胜

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

因此:

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

如果您有任何关于如何做到这一点的建议,我们将不胜感激


Ben

正如@David和@Michal Walenciak所指出的,它通过链接到gtest_main来工作。最后,我想我不需要链接到一个静态库,而是链接到一个DLL。

这不是你问题的答案,但是你是否尝试过链接gtest main而不是你的库?gtest提供了一个
gtest\u main
,这正是你正在做的(使用它)。当您使用
TEST
宏时,它会在静态初始化时通过注册您的测试。我无法从你所写的内容中判断,但在我看来,你有两个测试注册器-通常使用动态库获得多个版本的globals并不难,但我不知道如何使用你的设置实现。啊,这可能是个好主意。我试试看,谢谢你们
---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);
}
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.