webentwicklung-frage-antwort-db.com.de

Mocking-Framework für asp.net core 5.0

Ich habe vor kurzem Visual Studio 2015 installiert und ein Projekt mit einer Website und einer ASP-Klassenbibliothek gestartet, die die Komponententests für die Website enthalten wird. Normalerweise verwende ich Moq zum Spott, aber ich bin kein Fremder, um einen anderen Spottrahmen zu versuchen. Das Problem, das ich habe, ist, dass ich Moq als Referenz zum Unit-Testprojekt hinzugefügt und angefangen habe, es zu verwenden. Zuerst scheint alles in Ordnung zu sein, bis ich versucht habe zu kompilieren.

Beim Kompilieren erhielt ich eine Fehlermeldung:

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?)

Ich habe festgestellt, dass ich in der Codeansicht zwischen ASP.NET 5.0 und ASP.NET Core 5.0 wechseln kann. Wenn ich ASP.NET Core 5.0 auswähle, erhalte ich Fehler, aber keine, wenn ich ASP.NET 5.0 auswähle. Ich habe versucht, nach einer Antwort zu suchen, hatte aber kein Glück.

Ist das Problem, dass Moq nicht mit vnext funktioniert und ich ein anderes Framework verwenden sollte (wenn ja, welches funktioniert?) Oder kann ich das irgendwie lösen? Mein Projekt.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

Ich vermute, dass eine Version von Moq, die mit asp.net core 5.0 funktioniert, im Nuget-Feed nicht verfügbar ist, aber ich denke, Sie können mit Asp.Net 5.0 arbeiten.

8
Luca Morelli

Das ASP.NET-Team von Microsoft hat eine spezielle Version von Moq für den internen Gebrauch erstellt. Sie finden ein Fork-Projekt auf der Github-Seite asp.net

Wie benutzt man das?

  • Registrieren Sie eine Moq-Abhängigkeit in project.json:

    {
        "frameworks": {
            "dnx451": {
                "dependencies": {
                    "Moq": "4.2.1312.1622"
                }
            },
            "dnxcore50": {
                "dependencies": {
                    "moq.netcore": "4.4.0-beta8"
                }
            }
        }
    }
    
  • Erstellen Sie eine NuGet.config-Datei im Projektverzeichnis.

    <?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>
    

Und benutze Moq! :)

26
Lukasz Pyrzyk

Sie sollten in der Lage sein, die meisten Bibliotheken mit dem aspnet50-Framework zu verwenden, da dies mit den gleichen Strukturen/CLR-Stilen funktioniert, die in früheren .net-Frameworks verfügbar waren. Dies würde Moq/Rhino/Nunit usw. umfassen.

In aspnetcore50 verwenden Sie die neue CoreCLR, und Sie müssen Abhängigkeiten verwenden, die ebenfalls mit den neuen CoreCLR-Bibliotheken arbeiten. Xunit hat dies bereits getan, da die MS-Teams dies getan haben, um einen Komponententest durchführen zu können. Mir ist nicht bewusst, dass es noch einen spöttischen Rahmen gibt, aber ich suche einen.

Wenn Sie Ihr Projekt also auf die Verwendung des aspnet50-Frameworks beschränken, indem Sie aspnetcore50 entfernen, sollten Sie alles verwenden, was auch immer es ist.

Beachten Sie jedoch, dass Sie dadurch die Einschränkung erhalten, dass Sie nur Komponententests durchführen können, bei denen die Haupt-CLR verfügbar ist. Dies kann für Sie einschränkend sein, wenn Sie beabsichtigen, dass Ihre App bei der Bereitstellung auf CoreCLR ausgeführt wird (da Sie nicht unbedingt genau dasselbe testen, obwohl sie gleichwertig sein sollten).

Es gibt einige Diskussionen zu diesen Punkten hier zu einem Github-Thema über die Verfügbarkeit von NUnit

4
Jon Egerton

Ref from: https://neelbhatt40.wordpress.com/2016/10/15/moq-in-asp-net-core/

Sie müssen die folgenden Konfigurationen in project.json hinzufügen

{
    "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"
    }

}

Und dann erstellen Sie einen Nuget-Feed mit unten stehender URL:

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

0
Neel