2014-09-17 1 views
7

Framework 4.5.1을 사용하여 Visual Studio 2013의 MVC 5 용 .NET 템플릿 프로젝트에 포함 된 컨트롤러로 실행되도록 단위 테스트를 만들려고합니다.Owin을 사용하여 MVC 5 컨트롤러의 단위 테스트 만들기

이것은 표준 사용자 로그인을 위해 프로젝트에 포함 된 ManageController 클래스를 테스트한다고 가정합니다. 여기

내가 (이하 "인덱스"조치가 기본입니다 기억) 컨트롤러의 색인 작업을 호출 사용하고있는 코드입니다 :

[TestClass] 
public class ManageControllerTests { 
    [TestMethod] 
    public async Task ManageController_Index_ShoudlPass() { 
     using (var server = TestServer.Create<Startup>()) { 
      var response = await server.HttpClient.GetAsync("/Manage"); 
      Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); 
     } 
    } 
} 

이 시험은 실패하지 않습니다하지만 응답은이다 404. 그리고 프로세스를 디버깅하려고하면 컨트롤러 또는 이벤트에서 컨트롤러 생성자의 Index 메서드를 누르는 것 같지 않습니다.

NuGet을 통해 "Microsoft.Owin.Testing"패키지를 추가했습니다. 그리고 응용 프로그램의 Startup 클래스에있는 Configuration 메서드가 제대로 호출되고 있습니다.

무엇이 누락 되었습니까? 웹에서 테스트를 구현하는 명확한 예를 찾을 수 없었습니다. 컨트롤러를 테스트하는 방법을 단계별로 설명해 줄 수 있습니까?

감사합니다.

답변

1

할 수 없습니다. OWIN 파이프 라인은 모든 호스팅 환경과 분리되어 실행됩니다.

MVC는 OWIN 파이프 라인으로 테스트하기가 더 어려워진 system.web과 강하게 연결됩니다. 당신은 이런 비슷한 일을 할 수

:

[TestClass] 
public class ManageControllerTests { 
    [TestMethod] 
    public async Task ManageController_Index_ShoudlPass() { 
     using (var server = CustomTestServer.Create<Startup>()) { 
      server.OnNextMiddleware = context => 
      { 
       context.Response.StatusCode.ShouldBe(Convert.ToInt16(HttpStatusCode.OK)); 
       return Task.FromResult(0); 
      } 
      var response = await server.HttpClient.GetAsync("/Manage"); 
     } 
    } 

당신은

public class CustomTestServer : TestServer 

을 유도하고 기존 미들웨어 후 생성자의 미들웨어를 추가해야합니다

appBuilder.Use(async (context, next) => 
    { 
     await OnNextMiddleware(context); 
    }); 

그리고 공무원

public Func<IOwinContext, Task> OnNextMiddleware { get; set; }

여기에서 server.httpclient.getasync...으로 전화를 걸면 미들웨어가 처리 할 다음 미들웨어에 대한 응답을 전달합니다.

+0

나는 당신의 예제를 따르지 않고있다. 당신의 테스트 설정에서 테스트 서버 인스턴스'''Instance = TestServer를 생성하는''appBuilder.Use (async..'? which constructor? –

+0

) @MattKocaj는 어디에 있는가? ();'''과 StartupBdd를 만들려면 앱을 설정하는 데 사용할 수있는'''public void Configuration (IAppBuilder app)'''이 필요합니다. [msdn doc] (https://msdn.microsoft .com/en-us/library/microsoft.owin.testing.testserver.create (v = 117) .aspx) –