Assert.AreEqual在POCO上失敗。但是,它並不是在POCO中的單個項目上失敗。如何使它在VS 2010中的全部POCOs上工作如何在POCO上進行Assert.AreEqual傳遞
2
A
回答
4
您的POCO是否會以適當方式覆蓋Equals
?如果不是,那就是問題所在。覆蓋Equals
和GetHashCode
,你應該沒問題。
這是假設您只需要覆蓋一個平等的概念。另一種方法是在另一個類中實現IEqualityComparer<T>
,並使用它。 (我不知道是否可選IEqualityComparer<T>
參數,但您可以隨時調用它。)
2
您可以查看expected objects library。它非常整齊,並且在幕後爲您處理所有的比較邏輯,使您的代碼變得更輕鬆,更輕鬆。你甚至可以告訴它忽略類型,所以如果你想檢查一個對象的幾個屬性,你可以將它與一個對象或任何對象進行比較。
2
測試失敗,因爲您的對象不相等。他們可能在他們的領域有相同的價值觀,但這並不能使他們平等。默認情況下,如果對象具有相同的地址,並且它們是相同的對象,則它們是相等的。
要獲得您想要的行爲(即您希望具有相同值的屬性的對象相同),您需要覆蓋Equals
並定義它使對象相等。如果這是所有屬性,請在此處檢查所有屬性。如果只是一些,那麼只檢查那些。根據你的情況做任何需要做的事來確定平等。
如果您正在覆蓋Equals
你也應該覆蓋GetHashCode
,並確保當Equals
是真實的兩個對象GetHashCode
兩個返回相同的值。
相關問題
- 1. POCO:如何上傳圖像到webser使用poco在c + +
- 2. 如何在Alamofire4中進行multipartFormData上傳?
- 3. 如何用awk進行多次傳遞?
- 4. 如果Assert.AreEqual失敗,如何截圖?如何把條件與Assert.AreEqual?
- 5. 在進行DDD時,是否應該在POCO類上使用DI?
- 6. 如何將Poco :: SharedPtr傳遞給TimerCallback函數?
- 7. 使用Poco C++庫,我如何將數據傳遞給線程?
- 8. 在Visual Studio中對C#進行單元測試 - Assert.AreEqual
- 9. 如何在進行http請求調用時傳遞所有cookie?
- 10. 如何在運行python進程和javascript之間傳遞數據
- 11. 如何在rails中使用ajax進行私人消息傳遞
- 12. 如何在Ubuntu上爲POCO編譯SQLite?
- 13. 使用wicked_pdf創建pdf並傳遞給carrierwave進行上傳
- 14. 如何將命令行參數傳遞給BBEdit進行測試
- 15. 在純XMPP上使用Apache ActiveMQ + XMPP進行消息傳遞
- 16. 如何通過href在Laravel上傳遞傳遞數據?
- 17. 如何在使用su時在命令行上傳遞密碼
- 18. Assert.AreEqual(..)不
- 19. 如何在POST上傳遞Url參數?
- 20. 如何在線程之間傳遞事務以進行並行執行?
- 21. 上傳進度如何?
- 22. 如何在vc中停止正在進行的上傳
- 23. 如何在命令行上傳遞tomcat端口號?
- 24. mongodb - 如何在命令行上正確傳遞參數
- 25. 如何在遞歸上下文中進行惰性解釋?
- 26. 如何在SQL Server中進行上遞歸自聯接?
- 27. 如何在子進程和父進程之間傳遞整數
- 28. 如何將參數傳遞給進程
- 29. Python子進程,如何傳遞列表?
- 30. MVC + POCO +實體框架,在層之間傳遞對象
雖然這可能是一種選擇,但我會對此保持警惕,因爲它可能會導致您相信您的對象是平等的,但當在框架中使用許多方法和類時不會這樣考慮它們。即一個對象不會被認爲是集合的一部分,因爲這會使用Equals來執行該檢查。我不認爲這會解決OP對Assert.AreEqual的使用嗎?他將不得不使用ExpectedObject上的斷言。除非我誤解了一些東西...... –
@sam,不知道你的意思。這個預期的對象庫不是用於生產代碼,而是僅用於單元測試,所以他們的真實世界的平等不是重點,它的用途是檢查你從測試中收到的對象是否是你期望的。你是否期望所有的領域都是平等的,或者只關心一些領域是否取決於你。我只是看不到像poco這樣簡單的東西,代碼的唯一目的就是檢查測試中對象的平等性。 –
如果OP使用'Assert.Equal'來檢查他創建的兩個對象是否確實相等,這與驗證該對象是否與您期望的完全不同。預期的對象可能有助於簡化測試,但如果測試的**點**是創建2個具有相同值的對象,然後驗證它們被認爲是彼此相等,則根本無濟於事。如果你正在創建第二個對象來檢查第一個對象的值,那麼我可以看到這個值,但是從OP的問題來看,情況並非如此。我只是想明確這個區別。 –