我有一個項目,我正在接收對象作爲DTO,並將它們轉換爲View-Models。爲了做這個轉換,我決定做一些自定義的轉換器來進行一些計算,以便將DTO的屬性轉換爲視圖模型。所有這些都準備好了,並且轉換工作正常後,我想在轉換中添加一些單元測試以使其更加穩定(我知道這不符合TDD,但這是我設法實現的)。如何在單元測試中測試兩個對象的相等性?
問題是當我想要測試,以驗證兩個View的模型
Assert.AreEqual(expected, actual);
的平等由於沒有任何視圖 - 模型的定義Equals
方法,他們將永遠不等於作爲參考。有一些方法我想到了,發現比較這些對象:
要定義
Equals
方法。但我不知道定義它是否是一種好的做法,僅用於測試目的。如果我定義它,建議也定義GetHashCode
方法,所以我不覺得這個解決方案是最好的。我想另一種可能性是實現
IEqualityComparer<T>
測試項目,比較邏輯從主轉換項目隔離開來,甚至提取到一個第三項目這一點,所以如果有必要的轉換模塊可以在今後使用。這個實現看起來不錯,但我不知道是否值得添加另外一個包含很多類的項目,這些項目也應該進行測試。我在Stack Overflow question上發現的第三種方法看起來很有趣,它將序列化兩個對象並比較字符串。問題是我不知道這是否是編程的好習慣。
哪個比較對象最好?我錯過了一些可能更有效的方法嗎?
注意:視圖模型是複雜的對象,我無法改變轉換爲其他技術的方式。
好像你已經概述了優點和缺點 - 我不會相信序列化,除非它們是相同的類型 - 爲什麼兩種具有相同屬性的類型可能有不同的序列化有很多原因。 –
@DStanley他們將永遠是相同的類型,或者現在看來,雖然如果我正在使用泛型類型參數的方法,因爲它是來自「IEqualityComparer」的「Equals」,它接收兩個對象而不是簡單的比較,序列化它們並返回它們的字符串比較?這樣足夠穩定嗎? – meJustAndrew
@DStanley我可以看到你已經投票結束了這個問題,因爲這個問題太廣泛了,但我已經閱讀了幫助中心,意思是太寬泛了,我不認爲這個問題適合那個部分,因爲它的答案不是要求提供一本書的洞內容,甚至不需要很長的答案。請考慮許多其他編程問題可以有多個答案,這很好,但這些都不會使它們太寬泛*。謝謝! – meJustAndrew