2015-01-13 8 views
23

Ich habe vor kurzem Visual Studio 2015 installiert und startete ein Projekt mit einer Website und einer ASP-Klassenbibliothek, die die Komponententests für die Website enthalten wird. Normalerweise benutze ich Moq, um mich zu verspotten, aber ich bin kein Fremder, um einen anderen spöttischen Rahmen auszuprobieren. Das Problem, das ich habe, ist, dass ich Moq als Referenz zum Unit-Test-Projekt hinzugefügt habe und angefangen habe, es zu benutzen. Zunächst scheint alles in Ordnung zu sein, bis ich versucht habe zu kompilieren.Mocking Framework für asp.net Core 5.0

Als ich kompilierte ich eine Fehlermeldung bekam sagen:

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 bemerkte, dass ich zwischen ASP.NET 5.0 und ASP.NET Core 5.0 in der Codeansicht und bei der Auswahl von ASP.NET wechseln könnte Core 5.0 Ich bekomme Fehler, aber keine, wenn ich ASP.NET 5.0 auswähle. Ich habe versucht, nach einer Antwort zu suchen, aber ich hatte 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 project.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" 
} 

} 
+0

Ich habe schrieb dazu einen Blog. Schau mal hier: https://neelbhatt40.wordpress.com/2016/10/15/moq-in-asp-net-core/ – Neel

Antwort

8

Ich nehme an, dass bisher eine Version von Moq, die mit asp.net Kern arbeitet 5.0 ist in dem nuget Futter nicht zur Verfügung, aber ich glaube, Sie mit Asp.Net 5.0 arbeiten können.

+2

Ich habe "aspnetcore50": {"dependencies": {}} entfernt und es hat angefangen zu arbeiten – user1842278

+0

Lukasz Pyrzyk hat eine aktualisierte Antwort unten, die Moq mit aspnetcore50 arbeiten. –

4

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

In aspnetcore50 verwenden Sie das neue CoreCLR und müssen Abhängigkeiten verwenden, die ebenfalls auf die neuen CoreCLR-Bibliotheken umgestellt werden. Xunit hat dies bereits, da die MS-Teams es so gemacht haben, dass sie Unit-Tests durchführen konnten, daher ist es verfügbar. Ich bin mir nicht bewusst, dass es noch einen spöttischen Rahmen gibt, aber ich suche nach einem.

Daher, wenn Sie Ihr Projekt auf die Verwendung von nur das Aspnet50 Framework durch Entfernen von aspnetcore50 beschränken, dann sollten Sie in Ordnung sein, was auch immer zu verwenden.

Beachten Sie jedoch, dass dies die Einschränkung darstellt, dass Sie nur Unit-Tests durchführen können, wenn die CLR-Hauptfunktion verfügbar ist. Dies könnte für Sie restriktiv sein, wenn Sie beabsichtigen, dass Ihre App beim Deployment auf dem CoreCLR ausgeführt wird (da Sie nicht streng gegen dieselben Dinge testen, obwohl sie gleichwertig sein sollten).

Es gibt einige weitere Diskussion über diese Punkte here on a github issue about NUnit availability

26

ASP.NET-Team von Microsoft haben eine spezielle Version von Moq für den internen Gebrauch erstellt. Sie können ein Gabel-Projekt auf der asp.net github page finden.

Wie benutzt man das?

  • eine Moq Abhängigkeit in project.json registrieren:

    { 
        "frameworks": { 
         "dnx451": { 
          "dependencies": { 
           "Moq": "4.2.1312.1622" 
          } 
         }, 
         "dnxcore50": { 
          "dependencies": { 
           "moq.netcore": "4.4.0-beta8" 
          } 
         } 
        } 
    } 
    
  • eine Datei NuGet.config erstellen Home-Verzeichnis in Projekt.

    <?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 Moq verwenden!:)

+2

Ich musste den AspNetVNext Wert auf 'https: // www.myget.org/F/aspnet-contrib/api/v3/index.json' setzen, um moq.netcore zu finden. –

+1

Zusätzliche Details zum Hinzufügen eines neuen NuGet-Feeds zum Hinzufügen von Moq zu dnxcore50 in [Armen Shimoon's Blog] (http://dotnetliberty.com/index.php/2016/02/22/moq-on-net-core/) (mit Bildern!) – brntsllvn

+2

die [asp.net github Seite] (https://github.com/aspnet/moq4) Link am Anfang dieser Antwort ist 404 gebrochen. – gerryLowry

0

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

Sie müssen unter Konfigurationen in 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" 
    } 

} 

hinzufügen und dann erstellen Nuget mit unter URL-Feed:

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

Verwandte Themen