2

Je cherche à tester un ActionFilterAttribute dans un projet API .NET Core 2.0 et je me demande quel est le meilleur moyen de le faire. Notez que je n'essaie pas de tester cela via une action du contrôleur, mais simplement de tester le ActionFilterAttribute lui-même.Comment tester unit ActionFilterAttribute

Comment pourrais-je aller sur le test ceci:

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

Créer une instance du contexte le passer au filtre et affirmer le comportement attendu – Nkosi

Répondre

4

Créer une instance du contexte passent au filtre et affirmer le comportement attendu

Par exemple

[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

Merci pour la réponse. Trouvé ceci après avoir accepté cela a aidé aussi: https://stackoverflow.com/questions/36629391/how-to-mock-actionexecutingcontext-with-moq – ovation22