我們正在建立一個ASP.NET MVC的網站,我與這裏定義的連接最好使單元測試掙扎(我使用「連接」一般 - 它可能是一個會話,連接,適配器,或任何其他類型的數據上下文可以管理事務和數據庫操作)。在MVC中實例化Data Context(適配器,連接,會話等)的位置?
比方說,我們有3類:
UserController
UserService
UserRepository
在過去,我們會做UserService的方法中是這樣的:
Using (ISomeSession session = new SomeSession())
{
session.StartTransaction();
IUserRepository rep = new UserRepository(session);
rep.DoSomething();
rep.Save();
session.Commit();
}
然而,這是不是真的因爲SomeSession的依賴沒有被注入,所以可以對它進行單元測試。但是,如果我們使用D.I.要在UserService中注入依賴關係,會話在UserService的整個生命週期中都會掛起。如果從UserController調用了多個服務,則每個會話都可以掛起,直到UserController被垃圾收集爲止。
有關如何更好地管理此問題的任何想法?我錯過了明顯的東西嗎?
編輯
對不起,如果我不清楚 - 我知道我可以使用依賴注入與Session /數據上下文,但後來它被保存在服務類的生活。對於任何運行時間較長的操作/方法(即假設服務正在被批處理進程調用),除了增加可測試性之外,這可能會導致大量的開放會話。
如果您使用真正的連接進行測試,那麼您不是單元測試,而是集成測試。 – RichardOD 2009-08-10 10:04:34
理查德 - 我明白這一點。我的觀點是,我不知道如何在整個課程生命週期中保持連接不活動(或至少上下文活動),而不是在Using語句中的一小段時間內將依賴關係移動到課程級別。 「使用」塊似乎更安全,因爲它在需要時打開連接,並在完成時關閉連接。 – 2009-08-10 18:37:53