문제

이 코드를 사용하여 [테스트] (재확인 및 [설정] 등으로 이동) :

// arrange
var mockSomeService = new Mock<ISomeService>();
mockSomeService.Setup(m => m.IsTrue()).Returns(false);   
RouteConfig.RegisterRoutes(RouteTable.Routes);
FilterProviders.Providers.Add(new FilterProvider(mockSomeService.Object));
var controller = new HomeController();

// act
var result = controller.Index() as ViewResult;
.

어떤 이유로 FilterProvider에서 정의 된 AuthorizeAttribute는 결코 시작되지 않지만 MVC 앱을 수동으로 테스트 할 때는 잘 작동합니다.이 통합 테스트에서 설정 측면에서 뭔가를 놓치고 있습니까?

도움이 되었습니까?

해결책

필터는 요청 파이프 라인의 일부로 호출되므로 테스트에있는 것처럼 액션 방법의 직접 호출로 트리거되지 않습니다.

요청 파이프 라인과 필터를 호출하는 필터의 호출이 많이 테스트되었으므로 필터 객체에 대해 테스트를 직접 쓸 수 있으므로 대신 필터 객체에 직접 테스트를 작성할 수 있습니다..

다른 팁

모든 필터, 유효성 검사기, 라우팅 및 인증을 통해 ASP.NET-MVC 응용 프로그램을 테스트하는 데 도움이되는 도서관에서 작업 해 왔습니다.이 예에서는 사용자 정의 필터 공급자를 추가하는 방법을 보여줍니다.그것을 사용하려면 nuget 패키지 xania.aspnet.simulator를 추가해야합니다.

using Xania.AspNet.Simulator;
.....

[Test]
public void CustomFilterProviderTest()
{
    // arrange
    var action = new AccountController().Action(c => c.ChangePassword(null));
    action.FilterProviders.Add(new CustomFilterProvider());

    // act
    var result = action.Execute();

    // assert
    Assert.AreEqual("Your Message", result.ViewBag.Message);
    Assert.IsTrue(result.ModelState.IsValid);
    Assert.IsInstanceOf<ViewResult>(result.ActionResult);
    ...
}
.

GitHub에서 더 많은 예제를 찾을 수 있습니다. https://github.com/ibrahimbensalah/xania..aspnet.simulator / tree / master / xania.aspnet.simulator.tests

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top