2009-07-24 69 views
13

假設我們通過斷言結果對象的所有屬性與預期結果對象的屬性相等來測試方法的結果。我們是否應該實現equals方法並使用Assert.AreEqual(expectedResult,actualResult)...但是equals可能意味着生產代碼中有些不同。是否應該覆蓋等於在單元測試中聲明對象相等的方法?

哪個是最佳做法?

  • 斷言的對象的通過重寫等式equals方法

  • 斷言所有屬性

回答

18

我一個使用定製斷言的平等。主要有兩個原因:

  • 不要強迫測試考慮到生產中。這意味着在測試方法中equals的含義可能與生產代碼的含義不一致;
  • 等於可能對所有測試都不夠好。不同的測試需要不同的斷言,因此無論如何你最終可能會使用自定義斷言。
+0

我認爲你是對的,但如果被測對象的屬性在測試中不可訪問,該怎麼辦。使用反射? – 2015-01-22 11:33:52

3

我不認爲這個問題與標準的做事方式有關。這是考慮你的測試應該進行測試的問題。

如果要測試所有屬性是否相等,請聲明所有屬性相等。

如果要測試整個對象的方法的返回值,請聲明該方法。

+0

+1非常簡單但絕對準確! – 2012-11-09 14:59:48

4

如果您正在測試返回值對象(例如貨幣值或元組或映射)的方法或函數的返回值,那麼檢查結果對象是否等於預期的結果對象。在這種情況下,equals的標準實現應該做你想要的。同時,如果你在某個對象上調用了一個增變器,然後檢查它是否如預期的那樣改變了該對象,我認爲只檢查那些應該改變的對象的屬性會更有意義。這樣可以防止您必須對等值進行自定義定義,無論如何都會掩蓋您期望在測試中發生的情況。

相關問題