软件工程(2019)第二次作业 vs2017下基于c++的VSTS的单元测试实践

测试工具

软件工程(2019)第二次作业
vs2017下基于c++的VSTS的单元测试实践

程序功能编写

tou.h

class sizeyunsuan
{
public:
    sizeyunsuan(int x = 0, int y = 0) :x(x), y(y) {}
    ~sizeyunsuan() {};
    double jia(double x, double y);
    double jian(double x, double y);
    double cheng(double x, double y);
    double chu(double x, double y);
    double x, y;
};

源.cpp

#include "tou.h"
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;

double sizeyunsuan::jia(double x, double y) {
	return x + y;
}
double sizeyunsuan::jian(double x, double y) {
	return x - y;
}

	int main()
	{
		double x, y;
		cin >> x >> y;
		double he, cha;
		sizeyunsuan shu(x, y);
		he = shu.jia(x, y); cha = shu.jian(x, y);
		cout << he << endl;
		cout << cha << endl;
		//cin >> x;
		return 0;
	}

单元测试实现

在原有项目所在的解决方案下新建一个本机单元测试项目,并在引用中加入原有项目。

软件工程(2019)第二次作业
vs2017下基于c++的VSTS的单元测试实践

还需要添加依赖项,设置obj
软件工程(2019)第二次作业
vs2017下基于c++的VSTS的单元测试实践

#include "stdafx.h"
#include "CppUnitTest.h"
#include "../第二次作业/tou.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTes2
{		
	TEST_CLASS(UnitTest1)
	{
	public:
		
		TEST_METHOD(TestMethod1)
		{
			sizeyunsuan a;
			double  x = 3, y = 5;
			Assert::AreEqual(8.0, a.jia(x, y),DBL_EPSILON);
			//Assert::AreEqual(2.0, a.jia(y, x),DBL_EPSILON);

		}
		TEST_METHOD(TestMethod2)
		{
			sizeyunsuan b;
			double x = 3, y = 5;
			Assert::AreEqual(2.0, b.jia(y, x), DBL_EPSILON);
		}

	};
}

测试错误及分析

软件工程(2019)第二次作业
vs2017下基于c++的VSTS的单元测试实践

上面这个图片显示都错误,因为我设置的第二组数据他过不了。所以整个就显示错误了
我接下来用另一种方法,建立两个函数

软件工程(2019)第二次作业
vs2017下基于c++的VSTS的单元测试实践

上面显示第一组数据是正确的,与预期一致
一开始还有一种错误,如下

组名称: UnitTes2
分组依据: Hierarchy
组全名: UnitTes2
持续时间: 0:00:00.4819263
1 个测试失败
0 个测试跳过
0 个测试通过

结果1 名称:	TestMethod1
结果1 结果:	失败
结果1 持续时间:	0:00:00.4819263
结果1 StackTrace:	at UnitTes2::UnitTest1::TestMethod1() in f:软件工程unittes2unittest1.cpp:line 17
结果1 消息:	Assert failed. Expected:<2> Actual:<8>
结果1 StandardOutput:
结果1 StandardError:

出现这种错误的原因是我设置的变量是double型,变量加减有误差,所以这样,解决放大就是加一个DBL_EPSILON