GoogleTest:不同库中的 main() -> 未找到测试用例
GoogleTest: main() in different lib -> test cases not found
我的 VS 解决方案中有各种可执行项目,其中包含各种 GoogleTest 案例。我试图通过拥有一个单独的 .lib 项目来减少代码,该项目仅包含 main()
函数和 GoogleTest 的初始化代码。然后我可以 link 将其放入所有包含实际测试的 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.
在我的 exe 项目中显式添加 main()
(带有 gtest 初始化代码)时,它确实有效。我的直觉是它与 linker 有关,但我不确定为什么这不起作用。我仍然想避免在我所有的测试项目中添加 main+init..
任何有关执行此操作的好方法的建议都将不胜感激。
本
正如@David 和@Michal Walenciak 指出的那样,它通过 linking 到 gtest_main 起作用。最后,我认为我不需要 link 到静态库,而是到 DLL。
我的 VS 解决方案中有各种可执行项目,其中包含各种 GoogleTest 案例。我试图通过拥有一个单独的 .lib 项目来减少代码,该项目仅包含 main()
函数和 GoogleTest 的初始化代码。然后我可以 link 将其放入所有包含实际测试的 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.
在我的 exe 项目中显式添加 main()
(带有 gtest 初始化代码)时,它确实有效。我的直觉是它与 linker 有关,但我不确定为什么这不起作用。我仍然想避免在我所有的测试项目中添加 main+init..
任何有关执行此操作的好方法的建议都将不胜感激。
本
正如@David 和@Michal Walenciak 指出的那样,它通过 linking 到 gtest_main 起作用。最后,我认为我不需要 link 到静态库,而是到 DLL。