作业要求20170928-2 单元测试结对
结对伙伴:邹双黛
要求1
对每个功能,先给出测试用例,然后在编码功能。请注意把测试用例视为功能需求完成的检验指标。
测试用例:https://git.coding.net/tianjiping/ruanjiangongcheng.git
版本 |
开始时间 |
结束时间 |
备注 |
V1.0 |
2017/10/4 15:30:30 |
2017/10/4 17:26:14 |
初步确定测试用例 |
|
|
|
|
测试用例ID |
用例标题 |
场景 |
测试数据 |
测试步骤 |
预期结果 |
TC1-1 |
功能一-用户计算结果输入格式错误 |
对用户输入的计算结果检验。 |
用户数输入题目的计算结果。 |
控制台出现题目后,输入“*”,*代表用户的计算结果,且*的第一个字符不为’?’。然后点击回车。 |
控制台输出“请重新输入答案”。 |
TC1-2 |
功能一-用户计算结果输入格式正确-值错误 |
控制台出现题目后,输入“?*”,*代表用户的计算结果。 |
控台台换行显示“答对啦,你真是个天才!” |
||
TC1-3 |
功能一-用户计算结果输入格式正确-值正确 |
控台台换行显示“你一共答对n道题,共m道题”(n代表答对题目的数量, m此时为20) |
|||
TC1-4 |
功能一-不输入计算结果 |
出现题目后,不输入任何字符,直接点击回车键。 |
控制台输出“请重新输入答案”。 |
||
TC1-5 |
功能一-答题结束 |
答完20道题后控制台应存在的输出结果。 |
|
答完20道题目。 |
控制台输出“你一共答对n道题,共m道题”(n代表答对题目的数量,m此时为20),该段文字与最后道题的输出结果之间存在一个空行。 |
TC2-1 |
功能二-用户计算结果输入格式错误 |
对用户输入的计算结果检验。 |
用户输入题目的计算结果。 |
控制台出现题目后,输入“*”,*代表用户的计算结果,且*的第一个字符不为’?’。然后点击回车。 |
控制台输出“请重新输入答案”。 |
TC2-2 |
功能二-用户计算结果输入格式正确-值错误 |
控制台出现题目后,输入“?*”,*代表用户的计算结果。然后点击回车。 |
控台台换行显示“答对啦,你真是个天才!” |
||
TC2-3 |
功能二-用户计算结果输入格式正确-值正确 |
控台台换行显示“你一共答对n道题,共m道题”(n代表答对题目的数量, m此时为20) |
|||
TC2-4 |
功能二-不输入计算结果 |
出现题目后,不输入任何字符,直接点击回车键。 |
控制台输出“请重新输入答案”。 |
||
TC2-4 |
功能二-答题结束 |
答完20道题后控制台应存在的输出结果。 |
|
答完20道题目。 |
控制台输出“你一共答对n道题,共m道题”(n代表答对题目的数量,m此时为20),该段文字与最后道题的输出结果之间存在一个空行。 |
TC3-1 |
功能三-题目数量为负数 |
命令行参数合法性检验 |
f4 -c -200 |
(1)打开控制台,进入可执行文件目录。 (2)输入测试数据。 (3) 点击回车键。 |
控制台输出“题目数量必须是 正整数。” |
TC3-2 |
功能三-题目数量为小数 |
f4 -c 3.5 |
|||
TC3-3 |
功能三-题目数量为字符串 |
f4 -c test |
|||
TC3-4 |
功能三-题目数量为0 |
f4 -c 0 |
|||
TC3-5 |
功能三-命令行参数不为-c |
f4 -m 5 |
控制台输出“输入不合法”。 |
||
TC3-6 |
功能三-命令行参数合法 |
f4 -c 4 |
(1)控制台输出4个不同的题目和正确答案。 (2)生成一个记录4个题目和正确答案的txt文件。 (3)题目与答案横向对齐,答案在题目右侧,同时答案的第一个数字竖直方向对齐。
|
1 首先添加c++测试工具
2 添加c++测试
3 在TestMethod1()函数里面添加要测试功能 ,我添加的是求值功能。
4 测试结果通过
5 测试代码如下
1 #include "stdafx.h" 2 #include<stdio.h> 3 #include<stack> 4 #include<stdlib.h> 5 #include<string> 6 #include<math.h> 7 #include<time.h> 8 using namespace std; 9 using namespace System; 10 using namespace System::Text; 11 using namespace System::Collections::Generic; 12 using namespace Microsoft::VisualStudio::TestTools::UnitTesting; 13 14 void weishu(char str[10], int i, int n); 15 struct Number 16 { 17 double a; 18 bool b; 19 }; 20 stack<Number>s3; 21 void houzhuiming(char str[10]) 22 { 23 stack<char>s1; 24 stack<Number>s2; 25 int i = 0, j = 0; 26 for (i = 0; str[i] != '\0'; i++) 27 { 28 if (str[i] >= '0'&&str[i] <= '9') 29 { 30 Number num; 31 num.a = 0; 32 num.b = 0; 33 while (str[i] <= '9'&&str[i] >= '0') 34 num.a = (str[i++] - '0') + num.a * 10; 35 s2.push(num); 36 i--; 37 } 38 else 39 { 40 if (str[i] == ')') 41 { 42 while (s1.top() != '(') 43 { 44 Number num; 45 num.b = 1; 46 num.a = s1.top(); 47 s2.push(num); 48 s1.pop(); 49 } 50 s1.pop(); 51 } 52 else if (s1.empty() || s1.top() == '(' || str[i] == '(') 53 { 54 s1.push(str[i]); 55 } 56 else 57 { 58 if ((str[i] == '*' || str[i] == '/') && (s1.top() == '+' || s1.top() == '-')) 59 s1.push(str[i]); 60 else 61 { 62 Number num; 63 num.b = 1; 64 num.a = s1.top(); 65 s2.push(num); 66 s1.pop(); 67 i--; 68 } 69 } 70 } 71 } 72 while (!s1.empty()) 73 { 74 Number num; 75 num.b = 1; 76 num.a = s1.top(); 77 s2.push(num); 78 s1.pop(); 79 } 80 while (!s2.empty()) 81 { 82 s3.push(s2.top()); 83 s2.pop(); 84 } 85 } 86 void fuhao(char str[10], int i, int n) 87 { 88 //srand(time(0)); 89 int num = rand() % 4; 90 srand(time(0)); 91 switch (num) 92 { 93 case 0:str[i] = '+'; break; 94 case 1:str[i] = '-'; break; 95 case 2:str[i] = '*'; break; 96 case 3:str[i] = '/'; break; 97 } 98 weishu(str, ++i, n); 99 } 100 void weishu(char str[10], int i, int n) 101 { 102 // srand(time(0)); 103 int num = rand() % 10; 104 srand(time(0)); 105 str[i] = '0' + num; 106 n++; 107 if (n == 4) 108 { 109 str[++i] = '\0'; 110 return; 111 } 112 i++; 113 fuhao(str, i, n); 114 } 115 116 namespace TestProject1 117 { 118 [TestClass] 119 public ref class UnitTest 120 { 121 private: 122 TestContext^ testContextInstance; 123 124 public: 125 /// <summary> 126 ///获取或设置测试上下文,该上下文提供 127 ///有关当前测试运行及其功能的信息。 128 ///</summary> 129 property Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ TestContext 130 { 131 Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ get() 132 { 133 return testContextInstance; 134 } 135 System::Void set(Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ value) 136 { 137 testContextInstance = value; 138 } 139 }; 140 141 #pragma region Additional test attributes 142 // 143 // 编写测试时,可以使用以下附加特性: 144 // 145 // 在运行类中的第一个测试之前使用 ClassInitialize 运行代码 146 //[ClassInitialize()] 147 //static void MyClassInitialize(TestContext^ testContext) {}; 148 // 149 // 在类中的所有测试都已运行之后使用 ClassCleanup 运行代码 150 //[ClassCleanup()] 151 //static void MyClassCleanup() {}; 152 // 153 //在运行每个测试之前,使用 TestInitialize 来运行代码 154 //[TestInitialize()] 155 //void MyTestInitialize() {}; 156 // 157 //在每个测试运行完之后,使用 TestCleanup 来运行代码 158 //[TestCleanup()] 159 //void MyTestCleanup() {}; 160 // 161 #pragma endregion 162 163 [TestMethod] 164 void TestMethod1() 165 { 166 // 167 // TODO: 在此处添加测试逻辑 168 // 169 stack<double>s4; 170 while (!s3.empty()) 171 { 172 Number c1 = s3.top(); 173 s3.pop(); 174 if (c1.b == 0) 175 s4.push(c1.a); 176 else 177 { 178 double c2 = s4.top(); 179 s4.pop(); 180 double c3 = s4.top(); 181 s4.pop(); 182 double c4; 183 switch ((int)c1.a) 184 { 185 case '+':c4 = c3 + c2; break; 186 case '-':c4 = c3 - c2; break; 187 case '*':c4 = c3*c2; break; 188 case '/':c4 = c3 / c2; break; 189 } 190 s4.push(c4); 191 } 192 } 193 return s4.top(); 194 }; 195 }; 196 } 197 int main() 198 { 199 char str[100]; 200 int js = 0; 201 for (int i = 0; i < 20; i++) 202 { 203 int t = 0; 204 int n = 0; 205 weishu(str, t, n); 206 houzhuiming(str); 207 double ans = void TestMethod1(); 208 for (int i = 0; str[i] != '\0'; i++) 209 printf("%c", str[i]); 210 printf("=\n?"); 211 double s; 212 scanf("%lf", &s); 213 if (abs(s - ans)<0.01) 214 { 215 js++; 216 printf("答对了,你真是天才\n"); 217 } 218 else 219 printf("再想想吧,答案似乎是%.2lf喔!\n", ans); 220 } 221 printf("你一共答对%d道题,共20道题。\n", js); 222 return 0; 223 }
要求 2
在博客报告测试用例全部fail 到 全部pass 的过程,报告事实 (fail到修改代码或者测试用例,到pass) 以及收获。 除了最初的框架,测试用例中存在一次性pass没有经过fail的,也报告一次性通过,给出如此优秀地实现了这部分功能的代码
测试以前没接触过,测试我主要是用单元测试,我先上网查了一下,网上说点击函数右键 如图
结果出现这样的错误 我查了一下,结果并没有解决这样的错误,然后我有直接添加测试,但是看老师的要求,2人结对,使用TDD测试框架 (如NUnit, JUnit, cppUnit等)完成本周作业四则运算试题生成的单元测试。我试着查了一下百度,百度说Nunit主要是c#的测试,Junt主要是java代码的测试,cppUnit主要是c++测试的工具然而我查了一下cppunit在vs2010上过程如图
什么都找不到,这就很尴尬了,所以我努力解决这个问题,结果没有成功,所以我又下载了个2015 ,在2015上找到了cppUnit
这样找到了,c++的测试,测试代码
1 [TestMethod] 2 void TestMethod1() 3 { 4 // 5 // TODO: 在此处添加测试逻辑 6 // 7 stack<double>s4; 8 while (!s3.empty()) 9 { 10 Number c1 = s3.top(); 11 s3.pop(); 12 if (c1.b == 0) 13 s4.push(c1.a); 14 else 15 { 16 double c2 = s4.top(); 17 s4.pop(); 18 double c3 = s4.top(); 19 s4.pop(); 20 double c4; 21 switch ((int)c1.a) 22 { 23 case '+':c4 = c3 + c2; break; 24 case '-':c4 = c3 - c2; break; 25 case '*':c4 = c3*c2; break; 26 case '/':c4 = c3 / c2; break; 27 } 28 s4.push(c4); 29 } 30 } 31 return s4.top(); 32 }; 33 }; 34 }
测试 git:https://git.coding.net/tianjiping/ruanjiangongcheng.git