簡體   English   中英

如何編寫測試用例?

[英]How to write Test Cases?

我想學習如何在編寫代碼之前編寫測試用例。 我讀了一篇關於測試驅動開發的文章。 我想知道開發人員如何編寫測試用例 例如這個方法:

    public int divideNumbers(int num1, int num2)
    {
      return num1 / num2;
    }

我們現在開始一個空白項目。 你想做點什么,比如分兩個數字。 所以你寫了一個描述你想做什么的測試:

Assert.That(divide(10,2), Eq(5))

此測試為您提供了一個入口點:它描述了divide方法的可接受接口。 因此,您可以繼續將其實現為int divide(int x, int y)

編寫測試,描述您希望從代碼中獲得的內容。 你不需要考慮太多。 編寫期望的最常用方式可能是設計代碼的最佳方式,然后您可以實現它以滿足您的測試。

有幾個步驟可供測試。 來自MSDN ;

在你的情況下;

Assert.AreEqual(divideNumbers(8, 4), 2);

Assert類使用true / false命題驗證單元測試中的條件。 您應該將測試用例寫入您期望的結果。 您可以將TestMethod屬性用於測試方法。 關於為c#代碼創建單元測試有一篇很酷的帖子。 分析得很好。

從您要開發的函數/類/組件的存根開始。 它應該編譯,但故意不(還)做它應該做的事情。

例如:

public int divideNumbers(int num1, int num2)
{
    throw new NotImplementedException();
}

要么

    return -42;

考慮預期的行為,將存根視為黑盒子的接口。 不關心實現(還)。 想想界面的“契約”:X進去,Y出去。

確定標准案例和重要案件。 為他們寫測試。

對於整數除法(假設我們將從頭開始編寫),實際上有幾種情況需要考慮:有和沒有余數,n / 1,n / 0,0 / n,0/0,負數等。

Assert.IsTrue(divideNumbers(4,4) == 1);
Assert.IsTrue(divideNumbers(4,3) == 1);
Assert.IsTrue(divideNumbers(4,2) == 2);
Assert.IsTrue(divideNumbers(4,1) == 4);
Assert.Throws<ArgumentException>(() => divideNumbers(4,0));

Assert.IsTrue(divideNumbers(0,4) == 0);
Assert.Throws<ArgumentException>(() => divideNumbers(0,0));

Assert.IsTrue(divideNumbers( 4,-2) == -2);
Assert.IsTrue(divideNumbers(-4, 2) == -2);
Assert.IsTrue(divideNumbers(-4,-2) ==  2);

Assert.IsTrue(divideNumbers( 4,-3) == -1);
Assert.IsTrue(divideNumbers(-4, 3) == -1);
Assert.IsTrue(divideNumbers(-4,-3) ==  1);

編譯並運行單元測試。 他們都失敗了嗎? 如果沒有,為什么? 也許其中一個測試沒有按預期工作(測試也可能是錯誤的!)。

現在,開始實施,直到沒有測試失敗。

首先要意識到理論與實踐之間的區別。

任何現實生活系統都會有通過TDD輕松創建的東西,而有些則不是。

最后一組是依賴於環境的一切,當在一個不尋求抽象出環境假設的系統上工作時,但是實際上接受這些假設。

該組可以以TDD方式開發,但它需要額外的工具和軟件工廠的擴展。

對於.Net,這將是工具和擴展,如MS虛擬測試實驗室和SpecFlow。

我想要傳達的是它取決於它

對於非常簡單的組件/單元測試,想法是在編寫要測試的代碼之前編寫失敗的測試用例,並在測試成功運行時結束開發。

對於集成測試及其他(系統測試),除了考慮要測試的內容之外,還需要考慮如何將測試環境置於某種已知狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM