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