1. 程式人生 > >第三次作業——單元測試

第三次作業——單元測試

stc https 而後 html 減法 功能 += 重現 brush

此作業要求參見:[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;

第五次測試:

技術分享圖片

至此測試用例全部通過。程序可以實現生成字符串類型的試題、生成正確的逆波蘭式、正確計算逆波蘭式的功能。


心得:

通過單元測試地檢驗才能清晰地看出自己程序的不足之處。在編寫測試用例時,通過兩個人地討論,對整個程序運行過程中的可能出現的情況進行猜測,有助於更好地完成程序的功能。也希望在未來的一周,身邊的同學可以多多發現我們程序中的不足,從而進一步完善我們的程序。

第三次作業——單元測試