作爲基於測試的開發新手,這個問題一直困擾着我。多少是太多了?應該測試什麼,應該如何測試以及爲什麼要測試它?給出的例子是用NUnit在C#中,但我認爲這個問題本身是語言不可知的。測試用例,「什麼時候」,「什麼」和「爲什麼」?
下面是我自己的兩個電流的例子,一個泛型列表對象測試(被用繩子測試,初始化函數添加三個項目{"Foo", "Bar", "Baz"}
):
[Test]
public void CountChanging()
{
Assert.That(_list.Count, Is.EqualTo(3));
_list.Add("Qux");
Assert.That(_list.Count, Is.EqualTo(4));
_list[7] = "Quuuux";
Assert.That(_list.Count, Is.EqualTo(8));
_list.Remove("Quuuux");
Assert.That(_list.Count, Is.EqualTo(7));
}
[Test]
public void ContainsItem()
{
Assert.That(_list.Contains("Qux"), Is.EqualTo(false));
_list.Add("Qux");
Assert.That(_list.Contains("Qux"), Is.EqualTo(true));
_list.Remove("Qux");
Assert.That(_list.Contains("Qux"), Is.EqualTo(false));
}
的代碼是相當自我註釋的,所以我不會介入發生的事情,但是這種事情是否過分了? Add()
和Remove()
當然是單獨測試的,那麼我應該對這些測試進行什麼級別的測試?我是否應該進行這些測試?
這是我自己的代碼,並在寫作測試實際上暴露了錯誤,即使我沒有懷疑它是越野車。至於我爲什麼要重新發明輪子,我需要一個List類型類,它支持添加/刪除項目時發生的事件等。 –
2008-10-04 06:59:42
因爲它是您的代碼,那麼是的,請爲它編寫測試。即使寫他們是無聊或感到浪費,每一個非平凡課程的測試都可以避免一小段時間的挫折感。我不用C#寫的唯一測試就是{get; set;}屬性。 – 2008-10-04 07:02:50
爲什麼不只是爲默認通用列表編寫一個裝飾器,在add/remove上觸發這些事件,將實際工作傳遞給超類? – jdmichal 2009-02-17 20:10:07