Jestem zwolennikiem TDD, więc dla mnie testowanie aplikacji jest ważnym elementem. Ustawienie projektu testowego w ASP.NET Core to dla nowa lekcja. Zacząłem klasycznie: prawy przycisk myszką na solucję -> Add -> New Project… -> po lewej stronie wybrałem zakładkę Visual C# -> Test -> Unit Test Project, odpowiednia nazwa i OK. Następnie dodałem referencję:
Wybrałem referencje do innego projektu i otrzymuję komunikat:
A reference to ‚nazwaProjektu’ could not be added.
Pogooglowałem jak to można dodać projekt z testami do solucji z ASP.NET Core 1.0. Znalazłem na stronie xUnity odpowiedź jak odpalić projekt z testami. Jeżeli dobrze rozumiem, to aby testować aplikacje ASP.NET Core 1.0 trzeba też mieć dedykowane narzędzie do testowania.
Postępowałem zgodnie z instrukcjami dostępnymi na stronie xUnity. Nowy projekt postanowiłem jednak stworzyć w folderze src.
Skopiowałem bez wahania cały project.json jaki był przedstawiony na stronie:
{
"version": "1.0.0-*",
"description": "",
"authors": [ "" ],
"tags": [ "" ],
"projectUrl": "",
"licenseUrl": "",
"dependencies": {
"xunit": "2.1.0",
"xunit.runner.dnx": "2.1.0-rc1-build204"
},
"commands": {
"test": "xunit.runner.dnx"
},
"frameworks": {
"dnx451": { },
"dnxcore50": { }
}
}
Przekopiowałem testy ze strony i doszedłem do punktu: Run tests from the console. I ponownie jak w porzednim poście: command prompt, wszedłem do folderu solucji i wpisałem:
dnx test
Wszystko działało jak w przykładzie ze strony. Z resztą kroków też nie było problemu. Test -> Windows -> Test Explorer. Skomplikowałem solucję z testami i w Test Explorze pojawiły mi się wszystkie test.
Teraz musiałem połączyć główny projekt z projektem testowym. W projekcie testowym dodałem referencje do głównego projektu:
Po dodaniu referencji automatycznie uaktualnił się plik project.json.
{
"version": "1.0.0-*",
"description": "",
"authors": [ "" ],
"tags": [ "" ],
"projectUrl": "",
"licenseUrl": "",
"dependencies": {
"xunit": "2.1.0",
"xunit.runner.dnx": "2.1.0-rc1-build204"
},
"commands": {
"test": "xunit.runner.dnx"
},
"frameworks": {
"dnx451": {
"dependencies": {
"PokerWebsite": "1.0.0-*"
}
},
"dnxcore50": { }
}
}
Szybko dodałem jedną linijkę do jednego z testów, aby sprawdzić czy referencja działa:
using PokerWebsite.Core.Domain;
using Xunit;
namespace PokerWebsiteTests
{
public class Class1
{
[Fact]
public void PassingTest()
{
var player = new Player();
Assert.Equal(4, Add(2, 2));
}
[Fact]
public void FailingTest()
{
Assert.Equal(5, Add(2, 2));
}
int Add(int x, int y)
{
return x + y;
}
}
}
Niestety nie działała. Otrzymałem dwa błędy:
The type or namespace name ‚Player’ could not be found (are you missing a using directive or an assembly reference?)
The type or namespace name ‚PokerWebsite’ could not be found (are you missing a using directive or an assembly reference?)
Trochę czasu mi zeszło zanim doszedłem do konsensusu co jak można pozbyć się tych błędów. Co zrobiłem? Poprawiłem nieco mój project.json w projekcie z testami:
{
"version": "1.0.0-*",
"description": "",
"authors": [ "" ],
"tags": [ "" ],
"projectUrl": "",
"licenseUrl": "",
"dependencies": {
"xunit": "2.1.0",
"xunit.runner.dnx": "2.1.0-rc1-build204"
},
"commands": {
"test": "xunit.runner.dnx"
},
"frameworks": {
"dnx451": {
"dependencies": {
"PokerWebsite": "1.0.0-*"
}
},
"dnxcore50": {
"dependencies": {
"PokerWebsite": "1.0.0-*"
}
}
}
}
Ale wiele to nie dało mi jeszcze. Wręcz przeciwnie otrzymałem dodatkowy błąd:
The dependency PokerWebsite 1.0.0 in project PokerWebsiteTests does not support framework DNXCore,Version=v5.0.
Żeby szybko to naprawić wystarczyło dodać linijkę w pliku project,json w projekcie do którego robiłem referencję:
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"EntityFramework.Commands": "7.0.0-rc1-final",
"EntityFramework.Core": "7.0.0-rc1-final",
...
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel",
"ef": "EntityFramework.Commands"
},
"frameworks": {
"dnx451": { },
"dnxcore50": { }
},
"exclude": [
"wwwroot",
"node_modules"
],
"publishExclude": [
"**.user",
"**.vspscc"
],
"scripts": {
"prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ]
}
}
Po dodaniu tej linijki nie miałem żadnych innych błędów. Obydwa projekty zaczęły się kompilować. Mogłem kliknąć w Test Explorer na Run All i testy były ‚przeprowadzone’.


