似乎一切都设置正确,如果没有gtest,它可以正常构建和执行...(由于代码有些复杂,所以我无法在此列出所有源文件,但是没有添加gtest,文件链接正常,并按照预期运行)。
这是一个应用程序类型的项目。它具有多个库依赖项...不相关。
测试项目作为单独的项目添加到解决方案中。它将被测试的项目作为依赖项。测试项目的.h文件仅指向gtest... .cpp(不是标准的InitGoogleTest main)添加了自己的头文件,被测试项目的头文件,并且具有下面显示的测试。
当项目构建时,会自动创建TestedProject.lib,即使它是一个应用程序。我已将TestedProject.lib作为库依赖项添加到TestProject中(在Link中)。
Class x
{
public:
x(){} // I didn't really need this, I only added the class so I have access to
~x(){}; // non-class methods with gtest - but it still doesn't work
bool myFunction(std::string a, double b, bool c);
};
实现:
bool x::myFunction(std::string a, double b, bool c)
{
// implementation
return false;
}
somewhere_else
{
x x_instance;
y = x_instance.myFunction("a", 1, false); // works, all builds, executes, life is great
}
添加单元测试:
class TheTest : public ::testing::Test
{
protected:
x x_instance;
};
TEST_F(TheTest, Fail)
{
EXPECT_FALSE(x_instance.myFunction("a", 1, false));
}
无法编译。链接错误(已修改,类似上面的示例代码,使用简化名称,希望我没有搞砸内容)。
Error 2 error LNK2019: unresolved external symbol
"public: bool __thiscall x::myFunction(class std::basic_string<char,struct std::char_traits<char>,double,bool)"
(?myFunction@x@@QAE_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00000NNNN_N1@Z)
referenced in function "private: virtual void __thiscall TheTest_Fail_Test::TestBody(void)"
(?TestBody@TheTest_Fail_Test@@EAEXXZ) C:\path\file.obj
我以前做过这个 - 解决链接错误并使用Google测试编写了一些测试 - 但我看不出有什么问题。
作为一个测试,我在头文件中写了一小段代码:
int test(){return 4;}
然后,用以下代码替换test:
EXPECT_EQ(x.test(), 4);
它可以正常工作。太好了。但这意味着必须将所有测试的代码放在一个单独的文件中,如cpp文件之类的,这是不合理的。这个应用程序项目中有几个文件。
我该怎么解决这个问题?我该如何让Google Test链接和测试具有头文件和实现文件的类?当这个头文件/实现在不同的"应用程序"类型的项目中时?
到目前为止,我找到的唯一相似的问题:C++链接问题 - 当跨链接同一解决方案中的不同项目时
请帮我找到解决方案。