2017-09-26 6 views
2

Mon projet est une application Web ASP.NET Core 2.0.Comment tester les méthodes avec les attributs avec asp.net core 2?

Comment puis-je tester si mon propre attribut écrit fonctionne correctement en appelant une méthode contenant l'attribut?

Par exemple:

Attribut

[AttributeUsage(AttributeTargets.Method)] 
public class ValidateUserLoggedInAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext context) 
    { 
    var controller = (BaseController)context.Controller; 
    if (!controller.UserRepository.IsUserLoggedIn) 
    { 
     var routeValueForLogin = new RouteValueDictionary(new { action = "Login", controller = "Home", area = "" }); 
     context.Result = new RedirectToRouteResult(routeValueForLogin); 
    } 
    } 
} 

Controller:

[ValidateUserLoggedIn] 
public IActionResult Start() 
{ 
    ... 
} 

Test:

[TestMethod] 
public void Test() 
{ 
    // Act 
    var result = this.controllerUnderTest.Start() as RedirectToRouteResult; 

    // Assert 
    Assert.IsNotNull(result); 
    Assert.IsFalse(result.Permanent); 

    var routeValues = result.RouteValues; 

    const string ControllerKey = "controller"; 
    Assert.IsTrue(routeValues.ContainsKey(ControllerKey)); 
    Assert.AreEqual("Home", routeValues[ControllerKey]); 

    const string ActionKey = "action"; 
    Assert.IsTrue(routeValues.ContainsKey(ActionKey)); 
    Assert.AreEqual("Login", routeValues[ActionKey]); 
} 

Je l'ai déjà écrit un seul test pour l'attribut en créant un ActionExecutingContext, mais je veux aussi le tester pour la méthode du contrôleur.

+1

Cela nécessiterait un test d'intégration dans lequel vous envoyez une demande réelle soit en serveur de test en mémoire ou sur le site en cours d'exécution, puis vérifiez le comportement attendu https://docs.microsoft.com/en-us/aspnet/core/testing/integration-testing – Nkosi

+2

Mieux vaut tester la méthode et tester l'attribut séparément. – DavidG

Répondre

1

Cela nécessiterait un test d'intégration lorsque vous envoyez une requête réelle soit avec un serveur de test en mémoire ou un site en cours d'exécution, puis vérifiez le comportement attendu.

Référez à Integration testing in ASP.NET Core

Vous vous avez déjà testé l'attribut dans l'isolement avec un test unitaire, il va de soi qu'il se comporterait comme prévu dans l'intégration et de la production à condition que le critère couvert de comportement attendu