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
所以我用本机单元测试创建了一个新项目,并在其中引用了我的Adder项目。我不能只包含 .h 文件#include "adder.h"
所以我不得不使用相对路径。我通读了Microsoft的教程,看起来你必须使用这种路径。
我的问题是我无法让单元测试识别我的 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
,因为看起来Microsoft在他们的教程中没有这个。但这并没有奏效。我不确定如何让单元测试识别我的方法定义。
以防万一我在 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 中的第 15 行.cpp:"UnitTest::Adder:: UnitTest1 Adder":没有重载函数需要 2 个参数
unittest1.cpp 中的第 17 行:"初始化":无法从 '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 项目)。
对于在待测试项目中定义的未导出的类,您必须告诉测试器项目的链接器实现这些类。
即使在添加待测试项目作为对测试人员项目的引用后,我还必须修改测试器项目中的 Linker 选项以包含实现被测类的对象文件。
有关详细信息,请参阅使用 Microsoft 单元测试框架编写 C/C++ 的单元测试以获取C++。 特别是标题为">将测试链接到对象或库文件"的部分。
我从您所做的相同链接器错误转变为拥有有效的测试环境。 如果通过从测试项目中"引用"被测项目,它会为您处理此类事情,那就太好了。
我也遇到了这个问题。我发现了一些有效的方法,尽管我不确定这两种解决方案都是"正确"的解决方案。一种选择是在单元测试类中包含 .cpp 文件和 .h 文件。这很丑陋。
第二个有效的选项是右键单击单元测试项目,选择"添加",然后选择"现有项"。在出现的窗口资源管理器中导航到.cpp文件,然后选择"添加"。如果不希望这些源文件与单元测试源文件混合在一起,还可以创建一个新的筛选器来存储这些文件。
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 用于交叉编译和CMake的预处理器宏的单元测试
- C++ 用于单元测试的模板模板
- 提升 1.64 单元测试编译失败
- 单元测试欧拉到四元数实现失败
- 运行 C++ 单元测试时LNK2005链接错误
- 禁用自动捕获 Googletest 单元测试中的C++异常
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 使用 Google Test 对自定义断言函数进行单元测试
- 如何将我的 CMake 项目配置为运行所有单元测试?
- 在Qt C++单元测试中动态加载QQuickWindow而不是QQuickWidget
- MS 本机单元测试 - 断言::线程失败不起作用
- 如何获取 CMake 单元测试的相对路径?
- QTimer 超时不会在单元测试中触发
- 如何在提升构建中设置环境变量以进行提升单元测试框架?
- 在 AtMega32a 上运行的C++的单元测试
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- 如何用 c++ 编写单元测试?