2

Ich bin auf der Suche nach einem ActionFilterAttribute in einem .NET Core 2.0-API-Projekt und frage mich, die beste Möglichkeit, darüber zu gehen. Hinweis: Ich versuche nicht, dies durch eine Controller-Aktion zu testen, sondern teste das ActionFilterAttribute selbst.Wie Unit-Test ActionFilterAttribute

Wie könnte ich mich über diese Prüfung:

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

eine Instanz erstellen des Kontexts übergeben Sie es an den Filter und bestätigen Sie das erwartete Verhalten – Nkosi

Antwort

4

eine Instanz des Kontextes erstellen sie die Filter passieren und das erwartete Verhalten behauptet

Zum Beispiel

[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

Danke für die Antwort. Fand dies nach dem Akzeptieren, das half auch: https://stackoverflow.com/questions/36629391/how-to-mock-actionexecutingcontext-with-moq – ovation22

Verwandte Themen