web-dev-qa-db-fra.com

Cadre moqueur pour asp.net core 5.0

J'ai récemment installé Visual Studio 2015 et démarré un projet avec un site Web et une bibliothèque de classes asp qui contiendra les tests unitaires du site Web. J'utilise habituellement Moq pour me moquer, mais je ne suis pas étranger à essayer un autre framework moqueur. Le problème que j'ai est que j'ai ajouté Moq comme référence au projet de test unitaire et que j'ai commencé à l'utiliser. Tout semble bien aller jusqu'à ce que j'essaye de compiler.

Lorsque j'ai compilé, j'ai reçu un message d'erreur disant:

ASP.NET Core 5.0 error CS0246: The type or namespace name 'Moq' could not be found (are you missing a using directive or an Assembly reference?)

J'ai remarqué que je pouvais basculer entre ASP.NET 5.0 et ASP.NET Core 5.0 en mode Code. Lorsque je sélectionne ASP.NET Core 5.0, des erreurs se produisent, mais non lors de la sélection d'ASP.NET 5.0. J'ai essayé de chercher une réponse mais je n'ai pas eu de chance.

Le problème que Moq ne fonctionne-t-il pas avec vnext et que je devrais utiliser un cadre différent (si tel est le cas?) Ou puis-je résoudre ce problème d'une manière ou d'une autre? Mon projet.json:

{
"version": "1.0.0-*",
"dependencies": {
    "Web": "1.0.0-*",
    "Xunit.KRunner": "1.0.0-beta1",
    "xunit": "2.0.0-beta5-build2785",
    "Moq": "4.2.1409.1722"
},

"frameworks": {
    "aspnet50": {
        "dependencies": {
        }
    },
    "aspnetcore50": {
        "dependencies": {
        }
    }
},
"commands": {
    "test": "Xunit.KRunner"
}

}
24
user1842278

Je suppose qu’à ce jour, une version de Moq fonctionnant avec asp.net core 5.0 n’est pas disponible dans le flux de nugets, mais je pense que vous pouvez travailler avec Asp.Net 5.0.

8
Luca Morelli

L’équipe ASP.NET de Microsoft a créé une version spéciale de Moq à usage interne. Vous pouvez trouver un projet fork sur la page asp.net github

Comment l'utiliser?

  • Enregistrez une dépendance Moq dans project.json:

    {
        "frameworks": {
            "dnx451": {
                "dependencies": {
                    "Moq": "4.2.1312.1622"
                }
            },
            "dnxcore50": {
                "dependencies": {
                    "moq.netcore": "4.4.0-beta8"
                }
            }
        }
    }
    
  • Créez un fichier NuGet.config dans le répertoire de base du projet.

    <?xml version="1.0" encoding="utf-8"?>
        <configuration>
            <packageSources>
                <add key="AspNetVNext" value="https://www.myget.org/F/aspnetcidev/api/v3/index.json" />
                <add key="NuGet" value="https://api.nuget.org/v3/index.json" />
            </packageSources>
        </configuration>
    

Et utilisez Moq! :)

26
Lukasz Pyrzyk

Vous devriez pouvoir utiliser la plupart des bibliothèques avec le framework aspnet50, car celui-ci fonctionne avec le même "style" de structures/CLR disponible dans les frameworks .net précédents. Cela inclurait Moq/Rhino/Nunit, etc.

Dans aspnetcore50, vous utilisez le nouveau CoreCLR et devez utiliser des dépendances également commutées pour fonctionner avec les nouvelles bibliothèques CoreCLR. Xunit a déjà cela comme les équipes MS l'ont fait pour pouvoir effectuer des tests unitaires, d'où sa disponibilité. Je ne suis pas au courant qu'il existe encore un cadre moqueur, mais j'en cherche un.

Par conséquent, si vous limitez votre projet à l'utilisation du cadre aspnet50 en supprimant aspnetcore50, vous devriez pouvoir utiliser n'importe quoi.

Notez cependant que cela vous donne la restriction que vous ne pouvez effectuer des tests unitaires que si le CLR principal est disponible. Cela peut être restrictif pour vous si vous souhaitez que votre application s'exécute sur le CoreCLR après son déploiement (car vous ne testez pas strictement les mêmes éléments, même s'ils doivent être équivalents).

Il y a d'autres discussions sur ces points ici sur un problème de github concernant la disponibilité de NUnit

4
Jon Egerton

Réf de: https://neelbhatt40.wordpress.com/2016/10/15/moq-in-asp-net-core/

Vous devez ajouter les configurations ci-dessous dans project.json

{
    "version": "1.0.0-*",
    "description": "AspNetCoreMoq.Test Class Library",
    "authors": [ "armen" ],
    "tags": [ "" ],
    "projectUrl": "",
    "licenseUrl": "",

    "frameworks": {
        "dnxcore50": {
            "dependencies": {
                "Microsoft.CSharp": "4.0.1-beta-23516",
                "System.Collections": "4.0.11-beta-23516",
                "System.Linq": "4.0.1-beta-23516",
                "System.Runtime": "4.0.21-beta-23516",
                "System.Threading": "4.0.11-beta-23516",
                "AspNetCoreMoq": "",
                "xunit": "2.1.0-rc1-build3168",
                "xunit.runner.dnx": "2.1.0-rc1-build204",
                "moq.netcore": "4.4.0-beta8"
            }
        }
    },
    "commands": {
        "test": "xunit.runner.dnx"
    }

}

Et créez ensuite le flux Nuget avec l’URL ci-dessous:

https://www.myget.org/F/aspnet-contrib/api/v3/index.json

0
Neel