2011-11-28 3 views
1

Ninject를 사용하여 유닛 테스트에서 컨트롤러의 생성자 종속성을 자동으로 해결하는 방법을 잘 모릅니다.Ninject를 사용하여 Asp.Net MVC 유닛 테스트에서 컨트롤러 생성자 종속성을 해결합니다.

public void SetupDependencyInjection() 
    { 
     IKernel kernel = new StandardKernel(); 

     kernel.Bind<ISomeService>().To<SomeService>(); 

     DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
    } 

나는 생성자와 콘트롤이 : 다음과 같이 내 실제 응용 프로그램에서

나는 나의 gloabl.asax에 설치 내 의존성 주입이

public SomeController (ISomeService someService) 

을 모두가 어떻게 든 잘 작동이 마술처럼 SomeController 생성자는 someService를 인수로 호출합니다. 어떻게 든 내 단위 테스트 에서이 동작을 복제 할 수 있을지 모르겠다. 즉, 나 자신을 생성자를 통해 컨트롤러를 생성 할 필요가 없도록하기 위해 unittest를 구성하고 싶습니다. 실제 응용 프로그램에서와 같은 방식으로이 작업을 수행하고 싶습니다.

미리 도움 주셔서 감사합니다.

답변

0

나는 당신이 당신의 의존성에 대한 모의 객체를 생성하는 Rhino Mocks 또는 Moq 등의 조롱 프레임 워크를 사용할 수 있습니다 귀하의 단위 테스트에서

하지만 내 단위 테스트에서이 동작을 복제 얼마나 아무 생각이없고 그들에 대한 기대를 정의하십시오. 코뿔소 모의 객체와

예 :

[TestMethod] 
public void Test_Something() 
{ 
    // arrange 
    var serviceMock = MockRepository.GenerateStub<ISomeService>(); 
    serviceMock.Stub(x => x.SomeMethod(123)).Return("foo bar"); 
    var sut = new SomeController(serviceStub); 

    // act 
    var actual = sut.SomeAction(); 

    // assert 
    // TODO: assert on the result 
} 
+0

회신 주셔서 감사합니다,하지만 정말 무슨 뜻인지하지 않습니다. 완전히 수동으로 "new SomeController (serviceStub);를 호출하지 않아도되고 싶습니다."MVC DependencyResolver (NinjectDependencyResolver 사용)가 종속성을 해결하기 위해 수행하는 작업을 복제하려고합니다. – bplus

+0

@bplus, 당신은 단위 테스트에서 이것을하지 않습니다. 난 당신이 응용 프로그램의 단위 테스트 레이어의 지점을 고립에서 놓치고 있다고 생각합니다. 유닛 테스트에서 의존성 해결자를 사용한다면 기본적으로 컨트롤러의 구체적인 구현을 주입하여 단위 테스트를 시도하는 것과 응용 프로그램의 다른 계층을 강력하게 결합시켜야합니다. 이는 유닛 테스트에서하지 말아야합니다. 단위 테스트에서는 테스트 대상의 종속성을 완벽하게 제어하려고합니다. 그래서 조롱하는 프레임 워크를 사용합니다. –

관련 문제