第四次作业—单元测试
我和队友学习了有关单元测试的知识以及示例后开展了工作,单元测试的过程如下:
1:右键单击【解决方案】->左键单击【添加(D)】->【新建项目(N)】。
2:由于程序是c++项目,所以依次选【Visual C++】->【测试】->【本机单元测试】->【填写自己测试的名称(自己定义)】->【确定】。
3:输入测试的函数的来源文件和要测试的语句。
AreEqual()中第一个参数是函数的返回值,第二个参数是函数及其输入。
4:在此对所有的单元进行测试,依次点击【测试】->【调试】->【所有测试】。
5针对测试进行修改,如下截取2附图,运行通过或者不通过的情况。根据不同情况我们应该对本函数进行修改。
图一,未通过:
图二,通过测试
图三,多个测试依次次运行。
要求1 对每个功能,先给出测试用例,然后再编码功能。请注意把测试用例视为功能需求完成的检验指标。 (40分)
功能1:判断命令行输入的第二个参数是否是正整数。
测试用例包括:“负数”“小数”“字符”“字符串”“带空格的数”等等。
如果编译通过,则输入的不是正整数,若通过检验说明输入的是正数。
功能2:判断等式中括号出现位置是否正确。
测试用例包括:多组2维数据([0-8][0-7])。输出满足算是要求则说明括号排列 方式正确,不符合则说明错误。
功能3:判断程序输出的值和算式正确的值是否相等。
仅仅测试了其返回值。若返回1则说明正确,返回其他值说明错误(其实只能返回1,本测试用例用于测试“单元测试功能如何使用”)
要求2 在博客报告测试用例全部fail 到 全部pass 的过程,报告事实 (fail到修改代码或者测试用例,到pass) 以及收获。 除了最初的框架,测试用例中存在一次性pass没有经过fail的,也报告一次性通过,给出如此优秀地实现了这部分功能的代码。(40分)
整个单元测试,我们是按照功能来进行测试,就是每一个功能的函数截取出来,依次进行测试。截图如下:
功能一:判断命令行输入的第二个参数是否是正整数。输入“非正整数”时,返回结果为fail;输入正整数时,显示pass。
代码如下:
/*
判断是否是正整数
*/
bool isInteger(char* s) {
string str = s;
stringstream sin(str);
int a;
char b;
if (!(sin >> a))
return false;
if (sin >> b)
return false;
if (atoi(s) <= 0)
return false;
return true;
}
功能2:判断等式中括号出现位置是否正确。
该功能采用的是手动写加括号的方式。用turnBracket()函数将数组转换成对应位置的括号。
功能代码如下:
string turnBracket(int n, int m) {
switch (bracket_arr[n][m])
{
case 0:
return "";
case -1:
return "(";
case 1:
return ")";
case -2:
return "((";
case 2:
return "))";
default:
break;
}
}
手工模拟的括号数组:
/*
手动模拟加括号情况
0 无
-1 (
1 )
-2 ((
2 ))
*/
const int bracket_arr[9][8] = {
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ -1, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, -1, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, -1, 0, 0, 1 },
{ -1, 0, -1, 0, 0, 2, 0, 0 },
{ -2, 0, 0, 1, 0, 1, 0, 0 },
{ -1, 0, 0, 1, -1, 0, 0, 1 },
{ 0, 0, -2, 0, 0, 1, 0, 1 },
{ 0, 0, -1, 0, -1, 0, 0, 2 }
};
要求3 做好准备,在接下的一周你可能无法通过别人的测试用例。 (0分)
要求4 使用coding.net做版本控制。checkin 前要求清理 临时文件、可执行程序,通常执行 build-clean可以达到效果。(5分)