我已經閱讀過幾本有關TDD和BDD的書籍和文章,應該避免在單個單元測試或規範中出現多重斷言或期望。我可以理解這樣做的原因。但我不確定什麼是驗證複雜結果的好方法。多重期望/斷言來驗證測試結果
假設被測方法返回一個複雜的對象(例如反序列化或數據庫讀取),如何正確驗證結果?
1.Asserting每個屬性:
Assert.AreEqual(result.Property1, 1);
Assert.AreEqual(result.Property2, "2");
Assert.AreEqual(result.Property3, null);
Assert.AreEqual(result.Property4, 4.0);
2.Relying上的正確實施.Equals():
Assert.AreEqual(result, expectedResult);
1.缺點是,如果第一斷言失敗所有以下聲明不運行,這可能包含有價值的信息來找到問題。隨着房產的進出,可維護性也可能成爲問題。
2.的缺點是我似乎在用這個測試測試多個東西。如果.Equals()沒有正確實現,我可能會出現誤報或負面情況。我也沒有看到,如果測試失敗,實際上哪些屬性會有所不同,但我認爲這通常可以通過體面的.ToString()覆蓋來解決。無論如何,我認爲我應該避免被迫在失敗的測試中拋出調試器來查看差異。我應該馬上看到它。
下一個問題2是它比較,即使對於一些測試只一些性質可能是顯著的整個對象。
對於TDD和BDD來說,這將是一種體面的方式或最佳做法。
我傾向於不應該拋出調試器在失敗的測試看到的差異。另外DebuggerDisplay不會顯示在測試報告中,我想。 – bitbonk