2012-05-22 111 views
0

我希望通過業務邏輯加載實體並將其與直接從dbcontext加載的實體進行比較來加載正確的數據,以便單元測試我的業務邏輯。Assert.AreEqual單元測試DbContext實體

Assert.AreEqual失敗我猜測是因爲實體被加載爲跟蹤。

我認爲我可以使用AsNoTracking(),但它不起作用。

是否存在將實體從實體框架「展開」到POCO的方式?

我已閱讀關於禁用proxycreation,但是這是唯一的選擇嗎?

我希望有類似的東西(雖然我認識到一個完全不同的概念),在淘汰JavaScript庫中的ko.utils.unwrapObservable()。

回答

1

這是一個奇怪的集成測試(它根本不是單元測試,因爲它使用數據庫) - 它應該足以簡單地定義靜態期望而不是從數據庫再次加載它。動態測試更容易出錯,並可能隱藏問題。

要使其正常工作,您必須覆蓋Equal以比較未引用的數據。禁用代理創建將不起作用,因爲您將仍然有不同的業務邏輯引用和來自測試上下文的不同引用(除非您共享上下文,但在這種情況下測試會更奇怪)。

+0

Thanks @Ladisslav。好點:「它不是單元測試,因爲它使用數據庫」,單元測試感覺不太對,我打算讓它們變得更好。你的意思是因爲它用於數據庫的「預期」還是因爲它使用數據庫? –

+0

因爲它使用數據庫。單元測試應該獨立於外部因素測試單個單元。 –

+0

很酷的感謝,代碼讓我不寒而慄,我希望儘快重構它。謝謝您的幫助。 –