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.
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
Mieux vaut tester la méthode et tester l'attribut séparément. – DavidG