爲了能夠構造測試用例,我已經實現了使用依賴注入模式的名爲DefaultController的mvc基礎控制器。下面的例子:如何解決基礎控制器依賴注入測試的目的?
public class DefaultController : Controller
{
protected readonly ISessionHelper _sessionHelper;
string _thisUserOpenID;
protected IUsersRepository _UserRepository;
...
public DefaultController()
{ } //not for testing
public DefaultController(ISessionHelper session, IUserRepository repo)
{
_sessionHelper=session;
_UserRepository = repo;
}
}
然後,我必須使用這種控制器,HomeController中,UserController的我控制器等
現在,建設一些測試情況下,我發現自己在一個情況下,我不知道如何實際使用注入依賴模式。
[TestMethod]
public void Welcome_Message_In_ViewData_Has_Coockie_User_Display_Name()
{
// Below I want to insert FakeRepositories using
//ISessionHelper and so on. but the constructor
//for homecontroller don't have it.
HomeController controller = new HomeController();
任何想法?
只需注意 - 如果您擺脫了無參數的構造函數,那麼您還需要推出自己的控制器工廠。 – womp 2009-09-18 00:05:17
爲什麼選擇工廠?在上面的例子中,DI框架爲您注入了一切。類似ISessionHelper和IUserRepository的應該運行一個靜態會話,並且很可能不會有任何想要傳入的值。 所有你需要做的就是調用: var controller = IoC.Resolve() ;這一切都是爲你而建。 通過構造函數注入意味着您必須通過via方法參數傳遞變量,或者設置公共屬性(很像命令模式)。 –
Bealer
2009-09-18 07:24:42