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;
}
单元测试实现
在原有项目所在的解决方案下新建一个本机单元测试项目,并在引用中加入原有项目。
还需要添加依赖项,设置obj
#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);
}
};
}
测试错误及分析
上面这个图片显示都错误,因为我设置的第二组数据他过不了。所以整个就显示错误了
我接下来用另一种方法,建立两个函数
上面显示第一组数据是正确的,与预期一致
一开始还有一种错误,如下
组名称: 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