1. 程式人生 > >20180925-4 單元測試,結對

20180925-4 單元測試,結對

default 計算 語言 學會 font pop 問題 參考 逆波蘭式

此作業要求參見:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2146

git地址:https://git.coding.net/qiaojingyu/f4.git

單元測試代碼詳見上述git地址中的Test_f4.cs

結對夥伴:喬靜玉

集成環境:Visual Studio 2017

編程語言:C#

測試框架:NUnit3

測試環境地配置,以及如何編寫測試用例等參考了冉華學長的博客 http://www.cnblogs.com/ranh941/p/7629279.html ,在此深表感謝!

一、編寫測試用例

四則運算的實現大概可以分為幾個步驟,隨機生成試題的字符串,將字符串轉化為後綴表達式(逆波蘭式),對後綴表達式進行計算得到結果。

差不多是三個步驟,針對這三個步驟,我們討論設計了相應功能的測試用例。

(一)針對用於生成試題字符串的CreateEquation類

對生成的試題是否是字符串string類型進行了判斷。

(二)針對生成逆波蘭式的類CreateRPN

1. 無括號情況:

  • 輸入字符串:“19-4-2-8=”

    期望輸出結果:“19 4 - 2 - 8 - ”

  • 輸入字符串:“5*6+7/9=”

    期望輸出結果:“5 6 * 7 9 / +”

2. 有括號情況:

  • 輸入字符串:“1-2-(3-4)=”

    期望輸出結果:“1 2 - 3 4 - -”

  • 輸入字符串:“(1+2)*3-4=”

    期望輸出結果:“1 2 + 3 * 4 -”

  • 輸入字符串:“1+((2-3)/4)=”

    期望輸出結果:“1 2 3 - 4 / +”

(三)針對計算逆波蘭式的類Calculator

  • 輸入字符串:“1 2 +”

    期望輸出結果:3

  • 輸入字符串:“4 5 -”

    期望輸出結果:-1

  • 輸入字符串:“2 3 *”

    期望輸出結果:6

  • 輸入字符串:“12 6 /”

    期望輸出結果:2

  • 輸入字符串:“19 14 - 12 - 18 -”

    期望輸出結果:-25

  • 輸入字符串:“1 2 3 - 4 / +”

    期望輸出結果:0.75

二、測試情況

(一)第一次運行所有測試用例:

技術分享圖片

1. 生成逆波蘭式改錯:通過下圖可以查看到錯誤在於空格的添加。

技術分享圖片

對相應代碼的修改如下:

 1 int flag = 0;
 2 ... 
 3                 switch (strOld[i])
 4                 {
 5                     case +:
 6                     case -:
 7                     case *:
 8                     case /:
 9 ...
10                         ope.Push(strOld[i]);
11                         flag = 1;
12 ...
13                     default:
14                         num.Push(strOld[i]);
15                         if ((flag == 1) && (i != 0))
16                         {
17                             strNew += " ";
18                             flag = 0;
19                         }
20                         strNew += strOld[i];
21                         break;
22                 }
1 while (ope.Peek() != #)
2 {
3     strNew += " " + ope.Peek();
4     ope.Pop();
5 }

修改後測試通過:

技術分享圖片

2. 計算逆波蘭式改錯

計算結果與預期得到的值不同。

發現是因為減法和除法,左右值的賦值順序錯誤。

 1 //減法
 2 case -:
 3     left = result.Peek();
 4     result.Pop();
 5     right = result.Peek();
 6     result.Pop();
 7     answer =right - left;
 8     i++;
 9     break;
10 
11 
12 //除法
13 case /:
14     left = result.Peek();
15     result.Pop();
16     right = result.Peek();
17     result.Pop();
18     answer = right / left;
19     i++;
20     break

(二)最後一次測試,全部通過:

技術分享圖片

三、總結、心得

通過這次作業,學會了如何進行單元測試,保證自己的程序可以實現老師要求的基本功能。同時也發現了單元測試的重要性。同時也在這個作業快結束的時候,慢慢感受到一點TDD測試驅動開發的意思。先設計針對每個功能的測試用例,先考慮代碼的使用需求。然後通過運行這些測試用例是否通過,來找到自己代碼中存在的問題,沒有實現或是實現有誤的部分。

20180925-4 單元測試,結對