我想在編寫代碼之前學習如何編寫測試用例。我閱讀了一篇關於測試驅動開發的文章。我想知道開發人員如何編寫測試用例例如,此方法:如何編寫測試用例?
public int divideNumbers(int num1, int num2)
{
return num1/num2;
}
我想在編寫代碼之前學習如何編寫測試用例。我閱讀了一篇關於測試驅動開發的文章。我想知道開發人員如何編寫測試用例例如,此方法:如何編寫測試用例?
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
屬性來測試您的測試方法。有一個很酷的帖子關於Creating Unit tests for your c# code。分析得很好。
其實我想問的答案是你從codeproject分享的鏈接。謝謝。 – cihata87
從實現理論與實踐的區別開始。
任何現實生活系統都會通過TDD輕鬆創建,而另一些則不是。
最後一組是依賴於環境的一切,當工作在一個不尋求抽象環境假設但實際接受這些假設的系統上時。
該組可以採用TDD方式進行開發,但需要對軟件工廠進行額外的工具和擴展。
對於.Net這將是工具和擴展,如MS虛擬測試實驗室和SpecFlow。
我想溝通的是它取決於。
對於非常簡單的組件/單元測試,想法是編寫一個失敗的測試用例,然後編寫要測試的代碼,並在測試成功運行時結束開發。
對於集成測試和超越(系統測試),除了考慮測試什麼以外,還需要考慮如何將測試環境帶入某種已知狀態。
從您想要開發的函數/類/組件的存根開始。它應該編譯,但是故意不(它)做它應該做的事情。
例如:
public int divideNumbers(int num1, int num2)
{
throw new NotImplementedException();
}
或
return -42;
想一想預期的行爲,治療存根以黑盒的接口。不關心實現(還)。想想接口的「契約」:X進去了,Y出去了。
確定標準案例和重要egde案件。爲他們寫測試。
對於整數除法(假設我們會從頭開始寫),實際上有相當多的情況需要考慮:有和沒有餘數,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);
編譯並運行單元測試。他們都失敗了嗎?如果不是,爲什麼?也許其中一個測試不按預期工作(測試也可能是越野車!)。
現在開始實施,直到沒有測試失敗了。
你知道你已經在測試之前編寫了代碼嗎? :) – Rafal