20180925-4 單元測試,結對
此作業要求參見: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 單元測試,結對