2017-09-07 1 views
0

J'ai un contrôleur de base dont j'ai défini certaines propriétés de contrôleur communes dans la méthode OnActionExecutionAsync, puis définir certaines propriétés viewmodel commun dans la méthode OnActionExecuted cela fonctionne très bien, mais j'ai maintenant besoin écrire des tests unitaires pour cela. pas TDD pour moi ..Base de test unité Contrôleur OnActionExecutionAsync et méthodes OnActionExecuted

le code que j'ai est:

public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) 
{ 
    //set some controller properties 
    await base.OnActionExecutionAsync(context, next); 
} 

public override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    //set some other viewmodel properties 
    base.OnActionExecuted(filterContext); 
} 

le problème que j'ai avec les OnActionExecutionAsync essais, autre que étant une douleur droit de se moquer du contexte, est que lorsque la méthode complète , il appelle automatiquement la méthode OnActionExecuted et tombe comme ActionExecutedContext est null. Je suppose que je dois appeler await base.OnActionExecutionAsync(context, next);, plutôt que simplement await next();? pour continuer avec le pipeline, bien qu'ayant vérifié le code Controller dans github, il semble que l'implémentation de base n'appelle que OnActionExecuted lorsque le résultat du ActionExecutingContext est null aspnet core controller on GitHub aucune idée comment je peux obtenir mon test pour fonctionner sans sauter à OnActionExecuted?

Répondre

3

Vous êtes un test d'intégration. Quand les choses deviennent difficiles à tester, c'est un signe assez clair que vous êtes loin des limites des tests unitaires et que vous devez revenir en arrière et réévaluer. Si vous souhaitez garantir certaines fonctionnalités, créez une méthode qui encapsule cette fonctionnalité, puis testez . Vous pouvez supposer sans risque que OnActionExecutionAsync et tel fonctionnera comme ils sont censés et appellent votre méthode, car cette fonctionnalité est déjà testée dans la base de code MVC.