繁体   English   中英

Visual Studio 2015 C ++单元测试

[英]Visual Studio 2015 C++ Unit Test

我正在尝试学习如何在Visual Studio中使用C ++进行单元测试。

我创建了一个名为Adder的超级简单类,正如您可能猜到的那样,它增加了2个数字。

这是.h文件:

#ifndef ADDER
#define ADDER

class Adder {

private:
    int num1, num2;

public:
    Adder(int, int);
    ~Adder();

    int add();

};

#endif

所以我用Native Unit Test创建了一个新项目,并在其中引用了我的Adder项目。 我不能只包含#include "adder.h"的.h文件,所以我不得不使用相对路径。 我阅读了微软的教程 ,看起来你必须使用这种路径。

我的问题是我无法通过单元测试来识别Adder类的方法。 这是我的单元测试:

#include "stdafx.h"
#include "CppUnitTest.h"
#include "../addClass/adder.h" // Added a reference but still can't find without relative path

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{       
    TEST_CLASS(Adder)
    {
    public:

        TEST_METHOD(add) {

            Adder adder1(1, 1); // Won't recognize constructor

            int num = adder1.add(); // Won't recognize function

            Assert::AreEqual(2, num); 

        }

    };
}

我试图摆脱namespace UnitTest1因为它看起来像微软在他们的教程中没有。 但这并没有奏效。 我不知道如何让单元测试识别我的方法定义。

万一我在Adder类的实现文件中搞砸了一些东西我会把它放在这里,但我不认为这是问题所在。

#include "adder.h"

Adder::Adder(int a=0, int b=1):num1(a), num2(b){}
Adder::~Adder(){}

int Adder::add() {

    return num1 + num2;

}

编辑:以下是我得到的错误:

unittest1.cpp中的第15行:没有构造函数“UnitTest1 :: Adder :: Adder”的实例与参数列表匹配

unittest1.cpp中的第17行:类型为“void”的值不能用于初始化“int”类型的实体

unittest1.cpp中的第15行:'UnitTest :: Adder :: UnitTest1 Adder':没有重载函数需要2个参数

unittest1.cpp中的第17行:'initializing':无法从'void'转换为'int'

编辑2:

好的,所以我将单元测试文件更改为:

#include "stdafx.h"
#include "CppUnitTest.h"
#include "../addClass/adder.h" // Added a reference but still can't find without relative path

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{       
    TEST_CLASS(test)
    {
    public:

        TEST_METHOD(add) {

            ::Adder adder1(1,1); // recognizes constructor

            int num = adder1.add(); // recognizes function

            Assert::AreEqual(1, num); 

        }

    };
}

但是现在我收到链接器错误:

LNK2019未解析的外部符号“public:__thiscall Adder :: Adder(int,int)”(?? 0Adder @@ QAE @ HH @ Z)在函数“public:void __thiscall UnitTest1 :: test :: add(void)”中引用( ?add @ test @ UnitTest1 @@ QAEXXZ)UnitTest1 C:\\ Users \\ Matt \\ documents \\ visual studio 2015 \\ Projects \\ addClass \\ UnitTest1 \\ unittest1.obj

LNK2019未解析的外部符号“public:__thiscall Adder :: ~Adder(void)”(?? 1Adder @@ QAE @ XZ)在函数“public:void __thiscall UnitTest1 :: test :: add(void)”中引用(?add @ test @ UnitTest1 @@ QAEXXZ)UnitTest1 C:\\ Users \\ Matt \\ documents \\ visual studio 2015 \\ Projects \\ addClass \\ UnitTest1 \\ unittest1.obj 1

LNK2019未解析的外部符号“public:int __thiscall Adder :: add(void)”(?add @ Adder @@ QAEHXZ)在函数“public:void __thiscall UnitTest1 :: test :: add(void)”中引用(?add @ test @ UnitTest1 @@ QAEXXZ)UnitTest1 C:\\ Users \\ Matt \\ documents \\ visual studio 2015 \\ Projects \\ addClass \\ UnitTest1 \\ unittest1.obj 1

我有一个类似的问题,但有一个应用程序类型项目(而不是DLL项目)。

对于未导出的测试项目中定义的类,您必须告知链接器测试器项目的实现位置。

即使在将测试项目添加为测试人员项目的参考之后,我还必须修改测试人员项目中的链接器选项,以包括实现被测试类的目标文件。

有关详细信息,请参阅使用Microsoft Unit Testing Framework for C ++编写C / C ++单元测试 特别是标题为“ 将测试链接到对象或库文件 ”的部分。

我从使用相同的链接器错误到拥有一个有效的测试环境。 如果通过“引用”测试项目的测试项目,它会很好,它会为你处理这类东西。

我也遇到了这个问题。 我找到了一些有用的东西,虽然我不确定是否是“正确的”解决方案。 一种选择是在单元测试类中包含.cpp文件和.h文件。 这非常难看。

第二个选项是右键单击单元测试项目,选择Add,然后选择Existing Item。 导航到出现的窗口浏览器中的.cpp文件,然后选择添加。 如果您不希望它们与您的单元测试源文件混合,您还可以创建一个用于存储这些源文件的新过滤器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM