簡體   English   中英

與對象比較哪種方法更好/更合適?

[英]Which way is better/proper to compare to objects?

我正在編寫用於使用specflow測試REST服務的測試。 測試的主題是檢查我從服務獲得的列表是否包含正確的對象。

我在后台部分有示例數據,該數據在每次運行時都會放入數據庫中,並且每次運行后都會被清理。 關鍵是我知道數據庫中的確切數據和應該比較的對象是DTO類。

在測試中,我必須比較請求調用的結果(反序列化的JSON字符串到List<DTOObject> ),REST服務url和測試數據(填充的List<DTOObject> )。 所以,我有兩個List<DTOObject> 問題是哪種方法比較它們更好?

A,我編寫了一個通用的比較器類(我不想在我的測試庫和應用程序之間建立依賴關系),步驟是

  • 傳遞方法名稱(例如伙伴名稱)
  • 從任一列表中獲取一個項目並調用該方法以獲取具體數據以在另一個對象列表中找到相同的對象
  • 使具體數據遍歷另一個集合並在列表中的每個對象上調用給定方法,並比較上一步中得到的結果
  • 如果找到所需的類,則使用equals方法比較它們

B,

  • 從任一列表中取出一個項目
  • 遍歷另一個列表,並使用equals方法將每個項目與我在上一步中獲得的項目進行比較

目前,我有兩個想法。 我已經讀過一些關於比較的文章,並且我不想使其變得比需要的更為復雜。 我的意思是,實現IComparable接口,覆蓋GetHashCode方法。 另一方面,我不確定DTO類是否實現用於測試的接口會很好。

也許我沒有讀足夠的書,或者我太接近這個問題了。 我想請您回顧一下我的兩種可能的方法-我絕對不確定它們是否正確-如果您知道有關此問題的文章,請與我分享。 我不需要現有的解決方案-不熟練地使用他人的代碼不是我的方式-我需要提示要去哪里。

文章:

謝謝您的幫助!

為了比較對象本身,您應該覆蓋Equals()方法。 如果在某個時間點您的對象可能被用作Dictionary或類似內容中的鍵的可能性很小,則也重寫GetHashCode()

然后,您可以使用Enumerable.SequenceEqual()檢查兩個列表的相等性。 除了在對象上實現Equals ,您還可以創建IEqualityComparer<DTOObject>並將其傳遞給SequenceEqual調用,但是我認為實現Equals是更通用的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM