如何在 Visual Studio 中正确链接文件以运行本机测试?

Posted

技术标签:

【中文标题】如何在 Visual Studio 中正确链接文件以运行本机测试?【英文标题】:How to link a file properly in Visual Studio to run native tests? 【发布时间】:2020-11-06 20:41:31 【问题描述】:

我正在尝试为我的课程编写单元测试,但我得到了“未解析的外部符号”。没有语法错误,我尝试在 Microsoft 官方网站上查找原因,但不幸的是,它可能是由一百万种不同的原因引起的。关于我能做什么或可能导致它的任何建议?这是我的代码:

// Example.h file
#pragma once
#include <iostream>

using namespace std;

class Example 
public:
  int addTwoNumbers(int first, int second);
;
// Example.cpp file
#include "Example.h"
#include <iostream>

using namespace std;

int Example::addTwoNumbers(int first, int second) 
  return first + second;

// Test.cpp file
#include "pch.h"
#include "../Project/Example.h"
#include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace Tests

  TEST_CLASS(Tests)
  
  public:
    TEST_METHOD(UnitTest1)
    
      Example e;
      Assert::AreEqual(4, e.addTwoNumbers(2, 2)); // this line is causing issues
    
  ;

我得到的确切错误:

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2019 unresolved external symbol "public: int __thiscall Example::addTwoNumbers(int,int)" (?addTwoNumbers@Example@@QAEHHH@Z) referenced in function "public: void __thiscall Tests::Tests::UnitTest1(void)" (?UnitTest1@Tests@1@QAEXXZ)   Tests   C:\Users\me\source\repos\Tests\Tests.obj    1   

【问题讨论】:

在您的测试项目中,您如何编译Example.cpp?或者是静态库中的 Example.cpp?或者您是否在测试项目的链接器设置中包含了 Example.obj? 请提供带有未解决符号的完整错误。检查事项:如果程序和测试是单独的项目,请确保链接选项卡包含列表中的程序/库。相同的静态或动态 C++。 @drescherjm 我已通过单击“测试”然后单击“添加参考”将项目添加为参考...还有什么我需要做的吗?我还用我得到的完整错误更新了帖子。谢谢! @un-CharlieH 我已经用原始错误更新了代码。项目和测试是不同的项目,但我在测试中添加了对项目的引用。如何检查是否同时存在静态或动态?谢谢! 我不确定在本机 c++ 中的参考帮助更多的是 .NET / CLR 概念,相关:https://***.com/questions/40481799/adding-reference-to-native-visual-c-project 【参考方案1】:

您可以检查是否包含以下步骤。关于Write unit tests for C/C++ in Visual Studio,你可以参考这个link。

    添加对UnitTest的引用。

    指向对象或库文件的链接:Properties-&gt;Linker-&gt;Input-&gt;Additional Dependencies-&gt;input ..\ProjectName\Debug\*.obj

    为头文件添加#include指令:#include "../Project1/Example.h"

如果还是出现lnk2019,尝试在Example.cpp中添加如下代码。

#include<iostream>
#include "Example.h"
using namespace std;

int Example::addTwoNumbers(int first, int second) 
    return first + second;


int main()

    return 0;

【讨论】:

以上是关于如何在 Visual Studio 中正确链接文件以运行本机测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2010 中正确引用 dll?

如何创建包含链接文件的 Visual Studio 项目模板?

visual studio 2008 c++ 中怎样添加动态链接库?

在 Visual Studio 2012 中,如何将资源文件 (.rc) 与 c ++ dll 链接

在 Visual Studio 中链接 MTL(矩阵模板库)

如何使用 Visual Studio Code 创建和链接另一个网页?