第三次作業——單元測試
此作業要求參見:[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
要求1:對每個功能,先給出測試用例,然後再編碼功能。請註意把測試用例視為功能需求完成的檢驗指標。
測試用例1:測試所生成的試題是否是字符串
調用生成試題函數,判斷返回結果類型。
測試用例2:測試生成逆波蘭式
1、無括號生成逆波蘭式
(1)測試同級運算符生成逆波蘭式
輸入字符串:“19-4-2-8=”
期望輸出結果:“19 4 - 2 - 8 - ”
測試用例3:測試生成逆波蘭式
1、無括號生成逆波蘭式
(2)測試混合運算生成逆波蘭式
輸入字符串:“5*6+7/9=”
期望輸出結果:“5 6 * 7 9 / +”
測試用例4:測試生成逆波蘭式
2、有括號生成逆波蘭式
(1)單括號同級運算符生成逆波蘭式
輸入字符串:“1-2-(3-4)=”
期望輸出結果:“1 2 - 3 4 - -”
測試用例5:測試生成逆波蘭式
2、有括號生成逆波蘭式
(2)單括號混合運算符生成逆波蘭式
輸入字符串:“(1+2)*3-4=”
期望輸出結果:“1 2 + 3 * 4 -”
測試用例6:測試生成逆波蘭式
2、有括號生成逆波蘭式
(3)雙括號混合運算生成逆波蘭式
輸入字符串:“1+((2-3)/4)=”
期望輸出結果:“1 2 3 - 4 / +”
測試用例7:測試逆波蘭式地計算
1、簡單四則運算
(1)加法測試
輸入字符串:“1 2 +”
期望輸出結果:3
測試用例8:測試逆波蘭式地計算
1、簡單四則運算
(2)減法測試
輸入字符串:“4 5 -”
期望輸出結果:-1
測試用例9:測試逆波蘭式地計算
1、簡單四則運算
(3)乘法測試
輸入字符串:“2 3 *”
期望輸出結果:6
測試用例10:測試逆波蘭式地計算
1、簡單四則運算
(4)除法測試
輸入字符串:“12 6 /”
期望輸出結果:2
測試用例11:測試逆波蘭式地計算
2、長逆波蘭式運算
(1)同級運算符長逆波蘭式計算
輸入字符串:“19 14 - 12 - 18 -”
期望輸出結果:-25
測試用例12:測試逆波蘭式地計算
2、長逆波蘭式運算
(1)混合運算符長逆波蘭式計算
輸入字符串:“1 2 3 - 4 / +”
期望輸出結果:0.75
要求2:在博客報告測試用例全部fail 到 全部pass 的過程,報告事實 (fail到修改代碼或者測試用例,到pass) 以及收獲。
第一次測試:
fail1:測試生成逆波蘭式(測試用例2:TestCreateRPN1),錯誤重現如下:
其中數字19之間插入了一個空格,末尾兩個減號之間未插入空格,找到相應的代碼片段如下:
int flag = 1; ... switch (strOld[i]) { case ‘+‘: case ‘-‘: case ‘*‘: case ‘/‘: ... ope.Push(strOld[i]); flag = 1; ... default: num.Push(strOld[i]); if ((flag == 1) && (i != 0)) { strNew += " "; flag = 0; } strNew += strOld[i]; break; }
其中變量flag是識別讀取到的字符是否為運算符,而後在運算符左右添加空格。參照測試結果發現邏輯有錯誤,然後將flag初值置為0。修改代碼之後再次測試。
第二次測試:
測試之後發現數字19已經可以以正確的格式輸出,但是末尾的“8-”的格式還是不正確。找到相應的代碼片段:
while (ope.Peek() != ‘#‘) { strNew += ope.Peek() + " "; ope.Pop(); }
發現在出棧時,空格添加的位置錯誤,修改成如下代碼再次進行測試:
while (ope.Peek() != ‘#‘) { strNew += " " + ope.Peek(); ope.Pop(); }
第三次測試:
至此,生成逆波蘭式功能正確運行。
fail2:逆波蘭式計算(測試用例8:TestCal2),錯誤重現如下:
發現減法結果計算錯誤,找到相應的代碼片段如下:
case ‘-‘: left = result.Peek(); result.Pop(); right = result.Peek(); result.Pop(); answer = left - right; i++; break;
發現運算邏輯錯誤,應該用先彈出棧的數字作為被減數,修改成如下代碼後再進行測試:
case ‘-‘: left = result.Peek(); result.Pop(); right = result.Peek(); result.Pop(); answer =right - left; i++; break;
第四次測試:
至此,減法運算能得到正確結果。
fail2:逆波蘭式計算(測試用例10:TestCal4),錯誤重現如下:
發現除法計算結果有錯誤,找到相應代碼為:
case ‘/‘: left = result.Peek(); result.Pop(); right = result.Peek(); result.Pop(); answer = left / right; i++; break;
發現運算邏輯錯誤,應該用先彈出棧的數字作為被除數,修改成如下代碼後再進行測試:
case ‘/‘: left = result.Peek(); result.Pop(); right = result.Peek(); result.Pop(); answer = right / left; i++; break;
第五次測試:
至此測試用例全部通過。程序可以實現生成字符串類型的試題、生成正確的逆波蘭式、正確計算逆波蘭式的功能。
心得:
通過單元測試地檢驗才能清晰地看出自己程序的不足之處。在編寫測試用例時,通過兩個人地討論,對整個程序運行過程中的可能出現的情況進行猜測,有助於更好地完成程序的功能。也希望在未來的一周,身邊的同學可以多多發現我們程序中的不足,從而進一步完善我們的程序。
第三次作業——單元測試