.NET Core - biblioteka testowa

W tym rozdziale przetestujemy naszą bibliotekę StringLibrary i aby to zrobić, musimy zmienić kolejność naszych projektów, tak abyśmy mogli przestrzegać domyślnej konwencji.

Otwórzmy global.json plik.

{ 
   "projects": [ "src", "test" ], 
   "sdk": { 
      "version": "1.0.0-preview2-003131" 
   } 
}

U góry tego pliku zobaczysz ustawienia projektu i skonfigurujesz folder, taki jak src i test domyślnie.

Zgodnie z konwencją musimy mieć projekty w tych folderach, jest to nowa konwencja, która będzie używana jako część .NET Core.

W Eksploratorze rozwiązań widać, że zarówno projekt konsoli, jak i projekt biblioteki znajdują się w src podczas gdy projekt testowy jest w środku test teczka.

Struktura projektów w Eksploratorze rozwiązań nie reprezentuje miejsca, w którym projekty fizycznie istnieją na dysku. Otwórzmy teraz folder Rozwiązanie, a zobaczysz toStringLibrary projekt nie znajduje się w src teczka.

Widać, że oba src i test foldery są mapowane na konwencję określoną w global.jsonplik. Mamy jednak jeden projekt StringLibrary, który jest poza konwencją. Dodajmy terazStringLibrary projekt wewnątrz src teczka.

W folderze src mamy dwa projekty i musimy naprawić problem, abyśmy mogli poprawnie używać wszystkich projektów. Wróćmy do programu Visual Studio i kliknij prawym przyciskiem myszy projekt StringLibrary i wybierz opcję Usuń. Nie usunie go, ale usunie tylko projekt.

Teraz kliknij prawym przyciskiem myszy folder src i wybierz Add → Existing Project…

Przejdź do projektu StringLibrary, który znajduje się teraz w src wybierz folder StringLibrary.csproj plik i kliknij Open.

Musimy teraz usunąć odniesienie do StringLibrary z project.json plik aplikacji konsoli.

{ 
   "version": "1.0.0-*", 
   "buildOptions": { 
      "emitEntryPoint": true 
   }, 
   "dependencies": { 
      "Microsoft.NETCore.App": { 
         "type": "platform", 
         "version": "1.0.1" 
      }, 
      "NuGet.CommandLine": "3.5.0", 
      "System.Runtime.Serialization.Json": "4.0.3" 
   }, 
   "frameworks": { 
      "netcoreapp1.0": { 
         "dependencies": { }, 
         "imports": "dnxcore50" 
      } 
   } 
}

Zapisz zmiany, a następnie dodaj odniesienie do StringLibrary ponownie w projekcie konsoli.

{ 
   "version": "1.0.0-*", 
   "buildOptions": { 
      "emitEntryPoint": true 
   }, 
   "dependencies": { 
      "Microsoft.NETCore.App": { 
         "type": "platform", 
         "version": "1.0.1" 
      }, 
   "NuGet.CommandLine": "3.5.0", 
      "System.Runtime.Serialization.Json": "4.0.3" 
   }, 
   "frameworks": { 
      "netcoreapp1.0": { 
         "dependencies": { 
            "StringLibrary": { 
               "target": "project" 
            } 
         }, 
         "imports": "dnxcore50" 
      } 
   } 
}

Teraz wszystko powinno znowu działać i możesz budować StringLibrary i wtedy FirstApp(projekt konsoli) bez żadnego błędu. Przetestujmy teraz funkcjonalność StringLibrary przy użyciu xunit. Musimy dodać odwołanie do StringLibrary do naszego projektu testowego. Kliknij prawym przyciskiem myszy projekt References of StringLibraryTests i wybierz opcję Dodaj odwołanie…

Kliknij OK który doda odniesienie do StringLibrarydo naszego projektu testowego. Zastąpmy teraz następujący kod wTests.cs plik.

using System; 
using Xunit; 
using StringLibrary; 
  
namespace Tests { 
   public class Tests { 
      [Fact] 
      public void StartsWithUpperCaseTest() { 
         string input = "Mark"; 
         Assert.True(input.StartsWithUpper()); 
      } 
      [Fact] 
      public void StartsWithLowerCaseTest() { 
         string input = "mark"; 
         Assert.True(input.StartsWithLower()); 
      } 
      [Fact] 
      public void StartsWithNumberCaseTest() { 
         string input = "123"; 
         Assert.True(input.StartsWithNumber()); 
      } 
   } 
}

Jak widać, mamy trzy metody testowe, które przetestują funkcjonalność StringLibrary. KliknijmyRun All link, a zobaczysz następujące dane wyjściowe w Eksploratorze testów.

Możesz także uruchomić testy z wiersza poleceń. Otwórzmy wiersz polecenia i wykonajmydotnet test Komenda.