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

时间:2019-02-14 09:57:56

标签: 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中,没有关于将源文件添加到测试项目的任何事情,但是即使添加了引用,它也对我不起作用。将所有源文件添加到两个项目中并不是测试所有内容的快速方法,因此我想知道是否还有另一种方法。

1 个答案:

答案 0 :(得分:2)

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

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