J'utilise contrôléractionInvoker code> pour appeler les tests de formulaire d'actions de contrôleur [AcceptVerbs( HttpVerbs.Post )]
[ActionException( SomeAttribute )]
public SomeResult AddMethod( long[] Ids )
{
//some code
}
3 Réponses :
à partir de la documentation On dirait que vous souhaitez utiliser la méthode invoqutionMethod, ce qui vous permet de passer des paramètres dans un cahonçon comme troisième argument. Strike> P>
Le ControlContext transporte réellement avec des données supplémentaires que le contrôleur utilisera pour la liaison (filtres, liants de modèle, données d'itinéraire). Votre argument devra être transmis à travers le ControlContext. P>
J'ai trouvé un exemple sur les contrôleurs de test de l'unité . P>
Le lien vers l'exemple ici est un lien mort
@ petithepagan-gerbil - pas sûr s'il est toujours pertinent, mais j'ai une réponse plus récente qui pourrait vous aider.
Vous ne devez pas utiliser le contrôleurInvoker à partir de vos tests d'unité. Qu'est-ce que vous essayez réellement d'accomplir? P>
Si vous essayez de tester le comportement de vos actions, appelez-les directement (ce sont des méthodes régulières). Si vous essayez de tester le comportement de vos filtres, créez un contexte simulé pour le filtre et appelez sa méthode Onxxx (). P>
Pourquoi ne pas utiliser le contrôleurInvoker? Il est nécessaire de tester l'interaction entre les attributs et l'action, si je comprends correctement
@qntmfred - Parce que vous testez l'infrastructure MVC à ce moment-là, qui est le code de la propriété de Microsoft. Normalement, lorsque l'unité teste des applications MVC, vous ne testez que le code que vous avez écrit et que vous le faites isolément de toute autre partie de l'infrastructure. Cela vous permet de suivre facilement les problèmes dans cette base de code. Test de l'infrastructure - E.G. L'interaction entre votre code et code tiers - est normalement un test d'intégration. Bien sûr, vous pouvez tester l'invocataire si vous le souhaitez, mais les tests unitaires pourraient se casser entre différentes versions de MVC, et vous pourriez devenir fou. :)
C'est en grande partie basé sur une opinion, il y a des moments où vous voulez pouvoir faire cela. Malheureusement, les cadres rendent difficilement à le faire en raison d'hypothèses faites par les développeurs dans la façon dont ils pensent que quelque chose devrait être testé. Heureusement que cela a changé, il suffit de voir à quel point il est facile de faire ces types de tests avec Aspnetcore, Owin, Nancyfx et Fubumvc pour en nommer quelques-uns.
J'utilise le contrôleurInvoker, car je souhaite écrire des tests de spécification autour de mes contrôleurs plutôt que des tests d'unités de faible niveau. Ce que j'ai trouvé, c'est que ma mise en œuvre du contrôleurInvoker a dû évoluer en fonction de ce que je teste, mais pour que ce qui suit ait fonctionné pour moi. à mes fins, il est utilisé dans la spécification CLASSE DE BASE DE BASE ET AUTOMATILES Dépendances simulées, mais l'essence de la façon dont vous l'utilisez est comme ceci: p> donc cela pourrait ressembler à ceci qui n'est pas testé. La majeure partie de la Cruft peut être cachée dans une classe de base: p>