Fork me on GitHub

软件工程(2019)第二次作业


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头文件

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++中编写单元测试程序,收获很多,单元测试作为程序设计过程中非常重要的一个环节,我必须要尽早掌握,并且也需要能熟练编写合理的单元测试,这对于软件工程来说很重要。


posted @ 2019-04-13 16:38  電哪吒  阅读(168)  评论(0编辑  收藏  举报