【问题标题】:Do I have to add tested source files to unit tests' project in VS2017?我是否必须将经过测试的源文件添加到 VS2017 中的单元测试项目中?
【发布时间】:2019-02-14 09:57:56
【问题描述】:

我正在尝试使用 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 中,没有任何关于将源文件添加到测试项目的内容,但即使添加了参考,它也对我不起作用。将每个源文件添加到两个项目中并不是测试所有内容的快速方法,所以我想知道是否有另一种方法。

【问题讨论】:

  • 测试项目和可执行项目在同一个VS解决方案中吗?
  • 是的。问题是我试图链接两个可执行文件。将测试程序转换为静态库解决了问题。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 2011-10-15
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2011-12-07
    相关资源
    最近更新 更多