테스트 사례를 구성 할 수 있도록 종속성 주입 패턴을 사용하여 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
왜 공장인가? 위의 경우 DI 프레임 워크가 모든 것을 주입합니다. ISessionHelper 및 IUserRepository 같은 것들은 정적 세션을 벗어나서 전달하려는 값이 없을 것입니다. var controller = IoC.Resolve() ; 그리고 그것은 모두 당신을 위해 지어졌습니다. 생성자를 통해 주입한다는 것은 메소드 params를 통해 변수를 전달하거나 공용 속성을 설정해야한다는 것을 의미합니다 (Command 패턴과 비슷 함). –
Bealer