我正在處理一些測試用例,我經常發現在每種情況下都會出現多個斷言。例如(過於簡化和剝離爲了簡潔評論):如何防止測試用例中的「過度測試」? (C#/ nUnit)
[Test]
public void TestNamePropertyCorrectlySetOnInstantiation()
{
MyClass myInstance = new MyClass("Test name");
Assert.AreEqual("Test Name", myInstance.Name);
}
這看起來原則上可以接受,但測試的重點是驗證,當類被實例化一個給定的名稱,名稱屬性設置正確,但如果在實例化過程中出現任何錯誤,它甚至會在斷言之前失敗。
我重構這樣的:
[Test]
public void TestNamePropertyCorrectlySetOnInstantiation()
{
MyClass myInstance;
string namePropertyValue;
Assert.DoesNotThrow(() => myInstance = new MyClass("Test name"));
Assert.DoesNotThrow(() => namePropertyValue = myInstance.Name);
Assert.AreEqual("Test Name", namePropertyValue);
}
但當然,現在我居然在這裏測試的三件事;在這個測試中,我沒有興趣測試MyClass的實例是否成功實例化,或者名稱屬性是否成功讀取,這些測試是在另一種情況下進行的。但是,如果前兩個測試失敗了,甚至不可能進行測試,那麼我怎樣才能測試最後一個斷言而不先斷言另外兩個斷言?
沒錯,它並沒有太多關於堅持'一個斷言每個測試'的事情,雖然沒有看到一個紅色的blob對測試代碼時,它實際上測試工作正常。 – Flynn1179 2010-07-23 09:32:45
@ Flynn1179:你爲什麼得到一個紅色的斑點?我不明白你的意思。 – 2010-07-23 09:36:10
對不起,我忘了提及;我使用ReSharper運行nUnit測試,當測試失敗時,它在測試列表中顯示爲紅色斑點。由於在我測試的實際聲明之前發現了一個錯誤,因此我有很多測試「失敗」。 – Flynn1179 2010-07-23 09:44:40