1.选择开发工具
Visual Studio 2017是在2017年发布的,也是我比较早使用的IDE之一,所以我选择使用Visual Studio 2017作为开发工具。由于之前已经安装过,所以这里不在赘述安装过程,只展示运行后的界面。
2.练习自动单元测试技术
编写源程序
1.先在VS2017中新建一个空项目
2.之后在右侧的源文件目录下添加C++文件
3.向该文件中写入如下代码:
#include "iostream"
#include "stdlib.h"
using namespace std;
// return the max number
int Func(int a,int b)
{
return (a > b) ? a : b;
}
int main()
{
int a, b;
cin >> a >> b;
Func(a, b);
cout << a << b << endl;
return 0;
}
4.在头文件目录下添加一个头文件
同时将想要测试的函数原型名称写在该头文件内
5.所有的这些完成之后,右键单击解决方案,生成该程序
编写单元测试程序
1.首先要新建一个测试项目。右键单击解决方案,可以添加一个新建项目
选择本机单元测试项目
2.单元测试项目创建完成后,需要增加对原项目的引用
3.不能忘记添加附加依赖项,右键单击单元测试项目,选择属性一栏
4.在属性中选择配置属性->链接器->输入,选定附加依赖项,点击这一行右侧的下拉选择框,选定<编辑...>,将被测试项目产生的所有 obj 文件路径写到附加依赖项中
obj文件在项目文件夹中的Debug文件夹中
5.以上工作完成之后,可以在单元测试项目中的源文件目录下找到叫unittest1.cpp的文件,打开该文件,我们需要在该文件中编写单元测试项目。其默认程序如下:
#include "stdafx.h"
#include "CppUnitTest.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace CalculatorUnitTest
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD(TestMethod1)
{
//请输入测试代码
}
};
}
6.在头文件部分引入之前定义过的Test.h头文件
#include "..\Project_Test\Test.h"
7.现在可以在默认的测试单元中进行正确性测试了,使用Assert(断言)来判断程序的返回值是否与我们期望的返回值相同,插入如下代码:
Assert::AreEqual(Func(2, 3), 3);
Assert::AreNotEqual(Func(5, 6), 5);
第一行是说,如果函数返回了数字3,而我们预期的结果也是数字3,则该条测试正确;
第二行是说,如果函数返回了数字6,而我们预期返回结果为数字5,两者不相等,则这条测试正确;
在菜单栏的测试选项中选择运行所有测试
测试结果如下图:
可以重新建立一个测试单元,进行错误性测试,代码如下:
TEST_METHOD(TestMethod2)
{
Assert::AreEqual(Func(2, 3), 2);
Assert::AreNotEqual(Func(5, 6), 6);
}
测试单元中第一条,函数返回结果为3,而我们的预期结果为2,所以理论上这条测试不会通过;
测试单元中第二条,函数返回结果为6,而我们的预期结果为6,所以理论上这条测试也不会通过;
需要注意的是测试单元的名字不能重复,所以括号内的内容需要改成TestMethod2
运行后的结果如下图:
这张图表明第一个测试单元通过了,但是第二个测试单元没通过,符合预期结果。
3.总结
在课堂中,我大概听明白了老师所说的单元测试的方法,但是具体到实践中该怎么执行,我还是不知道怎么下手,好在有相关的博文可以参考,最终也是学会了怎么在c++中编写单元测试程序,收获很多,单元测试作为程序设计过程中非常重要的一个环节,我必须要尽早掌握,并且也需要能熟练编写合理的单元测试,这对于软件工程来说很重要。