J'essaie de créer un test pour certains de nos appels WebAPI et j'ai des difficultés à accéder aux résultats. Dans tous les exemples que j'ai considérés, ils utilisaient OknegotiateContentresultResult. Le problème est que dans nos appels d'API Web, nous sommes souvent des heures d'envoi des données dans des objets anonymes afin que nous puissions combiner des ensembles de données. Je néglige probablement quelque chose d'évident, mais je ne peux pas sembler comprendre la bonne façon d'inspecter les informations de résultat pour la valider.
webapi snippet strong> p> Snippet d'essai API strong> p> [TestMethod]
public void TestGetOrderInfo()
{
var controller = new OrderController(_repo);
IHttpActionResult results = controller.GetOrderInfo(46);
Assert.IsNotNull(results);
}
3 Réponses :
La raison des problèmes des types anonymes est qu'ils sont des types internes plutôt que des publics, de sorte que vos tests ne peuvent donc pas les utiliser.
Si vous ajoutez un attribut InternalsVissileto à votre projet WebAPI, vous pourrez alors être capable de Référence Le résultat et son contenu via dynamique, par exemple: p>
J'ai exactement le même problème avec un type anonyme et IHTPACTIONRESULT. Je dois ajouter un nœud racine à mon retour JSON ainsi de Web API 2.0 Je fais Retour JSON (nouveau {utilisateur = personne}); code> Pour obtenir un nœud racine dans son "utilisateur". Cela renvoie maintenant un type anonyme. J'ai essayé de suivre votre exemple, mais il échoue sur
dynamique content = résultats.Content code> avec `'objet' ne contient pas de définition pour 'Content`
Cela a aidé, mais j'ai ensuite eu une erreur de compilateur "Compiler manquant requis membre" Microsoft.csharp.runtitimebinder.binder.convert '", qui me conduit à Stackoverflow.com/a/50050820/283895 et maintenant il est corrigé.
Les objets anonymes sont internes à l'assemblage qui les a créés. Si vous effectuez des tests unitaires dans un ensemble séparé (DLL), vous devez expliquer explicitement que vous souhaitez partager des valeurs internes avec cet assemblage à l'aide de l'attribut InternalsVissibleto. P>
Patrick a trouvé pourquoi vous obtenez une erreur "" objet "ne contient pas de définition pour" Contenu "". Le type anonyme généré par la SUT est interne. Partagez des internes avec le projet de test et vous devriez pouvoir inspecter le type anonyme en faisant quelque chose comme celui-ci dans l'assembléeInfo.cs dans le projet: être testé trouvé cela dans l'article ici http://patrickdesjardins.com/blog / HOW-to-Unit-Test-A-Méthode - That-Return-anonymous-Type P> P>
Avez-vous déjà eu ce travail? J'ai exactement le même problème à essayer d'utiliser un appareil à tester un contrôleur qui renvoie JSON via
ihttpAdserResult voit un type anonyme en raison de la nécessité d'ajouter un nœud racine avant le retour du contrôleur. Je ne peux pas tester cela, car je ne peux pas me lancer afin d'utiliser
oknegotiateContentresult code> correctement. J'ai essayé l'approche dynamique ci-dessous sans succès.