Google Test:错误LNK2019:Visual Studio 2013中未解析的外部符号

Sol*_*lti 3 c++ googletest unresolved-external visual-studio-2013

我正试图通过Google Test框架+ Visual Studio 2013进行我的第一次单元测试.但是我遇到了以下错误并且无法理解原因.

1> ------ Build build:Project:FirstGoogleTest,Configuration:Debug Win32 ------
2> ------ Build build:Project:googleTest,Configuration:Debug Win32 ------
1> MyMultiplier.cpp
2> gtest_main.cc
1> main.cpp
1>生成代码...
2> gtest-all.cc
1> FirstGoogleTest.vcxproj - > D:_Vault\Workspaces\UnitTestLearning\FirstGoogleTest\Debug\FirstGoogleTest. exe
2>生成代码...
2> googleTest.vcxproj - > D:_Vault\Workspaces\UnitTestLearning\FirstGoogleTest\Debug\googleTest.lib
3> ------ Build build:Project:MyMultiplier_UnitLevelTest,Configuration:Debug Win32 - -----
3> MyMultiplier_UnitLevelTest.cpp
3> MyMultiplier_UnitLevelTest.obj:错误LNK2019:未解析的外部符号"public:unsigned int __thiscall
MyMultiplier :: multiply(unsigned int,unsigned int)"(?multiply @ MyMultiplier @@ QAEIII @ Z )在函数"private:virtual void __thiscall MyMultiplier_multiplyNormalSmallValues_Test :: TestBody(void)"中引用(?TestBody @MyMultiplier_multiplyNormalSmallValues_Test @@ EAEXXZ)
3> D:_Vault\Wo rkspaces\UnitTestLearning\FirstGoogleTest\Debug\MyMultiplier_UnitLevelTest.exe:致命错误LNK1120:1未解析的外部因素
==========构建:2成功,1失败,0最新,0跳过==== ======

解决方案结构如下:https:
//www.dropbox.com/s/0cu8eqr7pz3ajaz/Untitled.png

ULT项目的"参考"项目包括"googleTest"和"FirstGoogleTest".这是"MyMultiplier_UnitLevelTest.cpp"

#include "gtest/gtest.h"  // access test macro
#include "MyMultiplier.h"   // testee
#include <iostream>
#include <string>

TEST(MyMultiplier, multiplyNormalSmallValues){
    MyMultiplier m;
    std::string name("MyMultiplier_ULT");
    unsigned int a = 5;
    unsigned int b = 10;
    unsigned int answer = m.multiply(a, b/*, name*/);
    ASSERT_EQ(a * b, answer);

}
Run Code Online (Sandbox Code Playgroud)

MyMultiplier.h中的"multiply"函数声明:

class MyMultiplier{
public:
    unsigned int multiply(unsigned int a, unsigned int b/*, std::string& name*/);
};
Run Code Online (Sandbox Code Playgroud)

签名匹配,还包括头文件.为什么ult项目找不到符号?

整个解决方案可以在这里下载:https://www.dropbox.com/sh/vc89o5ep139wkuk/AAA8Z76q6iAkP25zTmu9bR3ia

Sol*_*lti 10

根本原因是项目类型未正确设置.

在此示例中,有三个项目:

  1. FirstGoogleTest,是受试者.要测试的类位于此处.
  2. googleTest,这是谷歌测试框架
  3. MyMultiplier_UnitLevelTest,它是包含测试的ULT项目.

根本原因是"FirstGoogleTest"项目的配置类型设置为.exe,这与ULT项目相同.所以ult测试不能从"FirstGoogleTest"获得外部.将"FirstGoogleTest" 配置更改为静态库(.lib)后.解决方案可以正确编译,ULT运行正常.

  • 这不是一个好的解决方案.它要求您测试的所有内容都是库.如果您正在测试可执行文件怎么办?您是否要维护第二组项目文件,以便将所有内容构建到库中以进行单元测试? (15认同)