我已經通過朱莉·勒曼對實體框架書的工作,以確保動態代理創造,我碰到多少有些障礙的......編寫單元測試通過測試IEntityWithChangeTracker(EF4)
在66頁的「編程實體框架的DbContext」朱莉建議編寫單元測試,以確保正在創建動態代理,因爲用於獲取實體框架創建更改跟蹤代理是相當簡單的要求,但也很容易錯過。
有了這樣說,我也跟着朱莉的例子來寫我的代碼下面的測試的總體結構:
[Test]
public void IsDynamicProxy()
{
using (var scienceFairToGoContext = new ScienceFairToGoContext())
{
var scienceFair = scienceFairToGoContext.ScienceFairs.Create();
Assert.IsTrue(scienceFair is IEntityWithChangeTracker);
}
}
當我將鼠標懸停在scienceFair對象的非常明顯的一個變化跟蹤代理
System.Data.Entity.DynamicProxies.ScienceFair_D3C57A2F699E75F716E63553D950EF7EC75F0C603F69093FCD78122CC0D6452C
...但每當我運行單元測試它總是失敗,因爲「scienceFair是IEntityWithChangeTracker」總是評估爲false。
看來好像someone else ran into this issue as well and posted it to the O'Reilly forums,但似乎沒有被解決方案發布,也沒有我的谷歌搜索返回任何類型的答案。
我目前使用Visual Studio 2010,EF4,NUnit的,並通過ReSharper的運行我的測試。還值得一提的是,如果在簡單的控制檯應用程序中運行代碼並調試它,我會得到相同的結果。
我喜歡這樣的解決方案,但有一兩件事我很擔心。我按照你的建議實施了這個測試,但是當我從ScienceFair類的一個標量屬性中去掉virtual關鍵字時,我注意到一個動態代理仍在創建,並且測試仍然被標記爲傳遞。 我只能假設這是一個動態代理的關係,修復行動作爲變革跟蹤代理的規則之一是,所有屬性必須被標記爲虛擬的。有什麼方法可以確定這是測試中的變更跟蹤代理嗎? –