c++ - 我是否必须将经过测试的源文件添加到 VS2017 中的单元测试项目?

标签 c++ visual-studio unit-testing linker-errors

我正在尝试使用 this 为我的项目编写单元测试教程。

编译包含测试的项目后,我收到链接器错误,几乎与 this 中的相同问题。问题是那里的解决方案是添加对正在测试的项目的引用,但我已经这样做了,但我仍然得到与未添加引用相同的错误。然后我找到this问题。解决方案只是将经过测试的源文件添加到测试项目中,当然它工作正常。

这是给我 error LNK2019: unresolved external symbol 的示例代码:

A.h(在.exe项目中)

#pragma once

struct A
{
    int a;

    A(int a);
};

A.cpp(在.exe项目中)

#include "A.h"

A::A(int a) : a(a)
{
}

Tests.cpp(在测试项目中)

#include "stdafx.h"
#include "CppUnitTest.h"
#include "../Example/A.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

TEST_CLASS(UnitTests)
{
public:
    TEST_METHOD(TestStructInitialization)
    {
        int a = 5;
        A testObject(a);
        Assert::AreEqual(a, testObject.a);
    }
};

也许我误解了什么,但我认为添加引用应该允许在不需要将源文件添加到测试项目的情况下进行测试。在first tutorial ,我已经提到过,将源文件添加到测试项目没有任何意义,但即使添加了引用,它对我也不起作用。将每个源文件添加到两个项目并不是测试所有内容的快速方法,所以我想知道是否有另一种方法可以做到这一点。

最佳答案

当然,您的测试必须能够访问它需要的功能。由于一个可执行文件无法链接到另一个可执行文件,您有两个选择:

  • 在单元测试项目中也添加源文件
  • 重构代码,使您要测试的代码成为一个库(静态或共享),该库链接到所有三个可执行文件。

关于c++ - 我是否必须将经过测试的源文件添加到 VS2017 中的单元测试项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54687636/

相关文章:

c++ - 使用 std::array 创建树

visual-studio - VS2012 签名程序集错误 - "Cannot find the certificate..."

c# - 单元测试 : Clone and equality

angularjs - 如何在 AngularJS 中对 $location 服务 search() 方法进行单元测试?

c++ - Boost::geometry::multi_polygon 的负缓冲区

c++ - 为什么我可以打印动态分配的对象而不是使用 cout << 在堆栈上创建的对象?

C++11 match_regex 不匹配简单模式

asp.net - 如何使用 VS 2008 和 IE 完全禁用 JavaScript 错误

c# - 如何添加到 Visual Studio 错误列表窗口中的消息列表?

c# - 单元测试什么都不返回,如何断言?