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


1.选择开发工具

Visual Studio 2017是在2017年发布的,也是我比较早使用的IDE之一,所以我选择使用Visual Studio 2017作为开发工具。由于之前已经安装过,所以这里不在赘述安装过程,只展示运行后的界面。
1643360-20190413154011370-1935908804.png

2.练习自动单元测试技术

编写源程序

1.先在VS2017中新建一个空项目
1643360-20190413154141599-232646228.png

2.之后在右侧的源文件目录下添加C++文件
1643360-20190413154336501-1367755487.png

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.在头文件目录下添加一个头文件
1643360-20190413154912535-1930179654.png

同时将想要测试的函数原型名称写在该头文件内
1643360-20190413155051950-1325026036.png

5.所有的这些完成之后,右键单击解决方案生成该程序
1643360-20190413155257537-1985461287.png

编写单元测试程序

1.首先要新建一个测试项目。右键单击解决方案,可以添加一个新建项目
1643360-20190413155501836-1796291005.png

选择本机单元测试项目
1643360-20190413155702216-3521680.png

2.单元测试项目创建完成后,需要增加对原项目的引用
1643360-20190413155827322-623272570.png

3.不能忘记添加附加依赖项,右键单击单元测试项目,选择属性一栏
1643360-20190413160029166-634634357.png

4.在属性中选择配置属性->链接器->输入,选定附加依赖项,点击这一行右侧的下拉选择框,选定<编辑...>,将被测试项目产生的所有 obj 文件路径写到附加依赖项中
1643360-20190413160404642-324077217.png

obj文件在项目文件夹中的Debug文件夹中
1643360-20190413160616032-1407735071.png

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,两者不相等,则这条测试正确;
在菜单栏的测试选项中选择运行所有测试
1643360-20190413162136777-1895684098.png

测试结果如下图:
1643360-20190413161923176-1060850690.png

可以重新建立一个测试单元,进行错误性测试,代码如下:

TEST_METHOD(TestMethod2)
{
    Assert::AreEqual(Func(2, 3), 2);
    Assert::AreNotEqual(Func(5, 6), 6);
}

测试单元中第一条,函数返回结果为3,而我们的预期结果为2,所以理论上这条测试不会通过;
测试单元中第二条,函数返回结果为6,而我们的预期结果为6,所以理论上这条测试也不会通过;
需要注意的是测试单元的名字不能重复,所以括号内的内容需要改成TestMethod2
运行后的结果如下图:
1643360-20190413162758054-249012143.png

这张图表明第一个测试单元通过了,但是第二个测试单元没通过,符合预期结果。

3.总结

在课堂中,我大概听明白了老师所说的单元测试的方法,但是具体到实践中该怎么执行,我还是不知道怎么下手,好在有相关的博文可以参考,最终也是学会了怎么在c++中编写单元测试程序,收获很多,单元测试作为程序设计过程中非常重要的一个环节,我必须要尽早掌握,并且也需要能熟练编写合理的单元测试,这对于软件工程来说很重要。


转载于:https://www.cnblogs.com/Carlos-Yao/p/10701430.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值