作业要求20170928-2 单元测试结对

Posted 田继平

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作业要求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     }
View Code

 

 

要求 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 }
View Code

 测试 git:https://git.coding.net/tianjiping/ruanjiangongcheng.git

以上是关于作业要求20170928-2 单元测试结对的主要内容,如果未能解决你的问题,请参考以下文章

20170928-2 单元测试

评分结对编程附加题

软件工程第四次作业二—单元测试 —[结对刘成志]

软件工程(2018)结对编程第2次作业

结对作业2——自动生成四则运算

作业4:结对项目——词频统计