Testowanie w ASP.NET Core 1.0. DSP16 – część 5

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

DSP16-6.1

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.

DSP16-6.2

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:

DSP16-6.3

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’.

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *