2

.NET Core 2.0 API 프로젝트에서 ActionFilterAttribute를 테스트하고 그에 대한 최선의 방법이 궁금합니다. 참고, 컨트롤러 동작을 통해이를 테스트하지 않고 단순히 ActionFilterAttribute 자체를 테스트하십시오.단위 테스트 방법 ActionFilterAttribute

public class ValidateModelAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext context) 
     { 
      if (!context.ModelState.IsValid) 
      { 
       context.Result = new BadRequestObjectResult(context.ModelState); 
      } 
     } 
    } 
+0

인스턴스를 생성을 컨텍스트의 인스턴스를 생성 필터에 전달하고 주장 :

어떻게이 테스트에 대해 갈 수도 문맥의 그것을 필터에 전달하고 예상되는 행동을 주장한다. – Nkosi

답변

4

이 예상되는 동작 예를

를 들어

[TestClass] 
public class ValidateModelAttributeTest { 
    [TestMethod] 
    public void Invalid_ModelState_Should_Return_BadRequestObjectResult() { 
     //Arrange 
     var httpContext = new DefaultHttpContext(); 
     var context = new ActionExecutingContext(
      new ActionContext 
      { 
       HttpContext = httpContext, 
       RouteData = new RouteData(), 
       ActionDescriptor = new ActionDescriptor(), 
      }, 
      new List<IFilterMetadata>(), 
      new Dictionary<string, object>(), 
      new Mock<Controller>().Object); 

     var sut = new ValidateModelAttribute(); 

     //Act 
     sut.OnActionExecuting(context); 

     //Assert 
     context.Result.Should().NotBeNull() 
      .And.BeOfType<BadRequestObjectResult>(); 
    } 
} 
+1

응답 해 주셔서 감사합니다. 이를 수락 한 후이를 발견 한 것도 도움이되었습니다. https://stackoverflow.com/questions/36629391/how-to-mock-actionexecutingcontext-with-moq – ovation22