9
votes

IHTTPACTIONSRESULT ANONYMES ANONYMES - VALIDER LES RÉSULTATS

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> xxx pré>

Snippet d'essai API strong> p>

    [TestMethod]
    public void TestGetOrderInfo()
    {
        var controller = new OrderController(_repo);
        IHttpActionResult results = controller.GetOrderInfo(46);

        Assert.IsNotNull(results);


    }


1 commentaires

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 oknegotiateContentresult correctement. J'ai essayé l'approche dynamique ci-dessous sans succès.


3 Réponses :


12
votes

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: xxx


2 commentaires

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}); 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 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é.



2
votes

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.


0 commentaires

1
votes

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é xxx

trouvé cela dans l'article ici http://patrickdesjardins.com/blog / HOW-to-Unit-Test-A-Méthode - That-Return-anonymous-Type


0 commentaires