2012-03-02 1 views
0

Ninject와 Moq를 사용하여 ASP.NET MVC 3 용 유닛 테스트 클래스를 설정하는 방법에 대한 샘플을 많이 보았지만 모두 테스트 클래스 내에 모의 저장소 (mock repository)를 만드는 것이 포함된다.ASP.NET MVC 3, Ninject, Moq : 유닛 테스트 클래스 외부의 모의 저장소 인스턴스화

내가 시작하고 싶은 것은 응용 프로그램 시작 또는로드시 모의 저장소를 빌드하는 것입니다 (예 : Global.asax.cs).이를 대신 테스트 클래스에 전달하십시오. 그렇게하면 unit test 클래스를 변경하지 않고도 Ninject AllBindings() 메서드에서 세션 상태 저장소 또는 데이터베이스 저장소로 변경할 수 있습니다. 난 이미 응용 프로그램의 시작이 있습니다

ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());

이 난 global.asax.cs에 바인드 명령을 넣어 파악할 수 있지만, 어떻게는 테스트 클래스에 전달받을 것인가? Test> Run을 선택하면 global.asax.cs도 실행됩니까? 어떤 컨텍스트 (있는 경우)가 테스트 클래스를 호출하는지 잘 모르겠다. 이 작업을 수행하는 방법에 대해 머리를 감쌀 수 없으며 저장소를 먼저 작성한 다음 테스트 클래스에 전달하는 예제는 보지 못했습니다.

가능한가요, 그렇다면 어떻게 할 수 있습니까? 어떤 조언을 주셔서 미리 감사드립니다! 아마도 Global.asax.cs에, 그래서 - - 대신 내 테스트 클래스에이 통과

답변

3

는 내가 뭘하려는 응용 프로그램 시작 또는로드 에 모의 저장소를 구축합니다.

으음, 기다려, 당신이 단위 테스트의 전체 지점을 놓치고 있다고 생각합니다. 단위 테스트는 실행중인 ASP.NET 응용 프로그램과 관련이없는 별도의 프로젝트에 있습니다. Global.asax은 ASP.NET 응용 프로그램에서만 사용됩니다.

단위 테스트에서 ASP.NET 특정 클래스에 의존하지 않고 격리 된 시스템의 다른 클래스를 테스트해야합니다. 이러한 클래스가 저장소 나 서비스 계층에 따라 컨트롤러와 같은 다른 레이어에 종속되는 경우 모크 프레임 워크를 사용하여 컨트롤러를 독립적으로 테스트하기 위해 이러한 종속성에 대한 기대치를 정의 할 수 있습니다. 의존성이 조롱 될 수있는 인터페이스 또는 추상 클래스를 통해 표현되는 경우에만 작동합니다.

+0

Ah! 이제 나는 내 머리를 감싸고있다. 그 점을 명확히 해 주셔서 감사합니다! –

1

Global.asax를 사용하는 대신 (이유 Darin Dimitri 노트) 테스트 용 기본 클래스 나 tetst 유틸리티 클래스를 만들 수 있습니다. 또는 테스트를 위해 NInject를 드롭하고 테스트에서 직접 종속성 주입을 수행 할 수 있습니다. 내가 probaly 대부분의 테스트에 대한 수동 접근 방식을 선호합니다.

이렇게 말한 것이 있습니다. 테스트를 위해 기본 클래스를 생성하기로 결정했다면 NInjects 설정을 모두 수행 한 다음 테스트 클래스를 상속받을 수 있습니다. 그렇게하면 모든 테스트를하기 전에 NInject 설정을 테스트 해 볼 수 있습니다. Xunit.NET을 사용하면 다음 줄을 따라 표시됩니다.

public class TestBase 
{ 
    public TestBase() 
    { 
     // Ninject setup for tests 
    } 
} 

public class ATestClass : TestBase 
{ 
    [Fact] 
    public void ATestCase() 
    { 
     // do your test using the test Ninject setup 
    } 
} 
관련 문제