Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten samouczek przeprowadzi Cię przez interaktywne środowisko tworzenia przykładowego rozwiązania krok po kroku, aby poznać pojęcia dotyczące testowania jednostkowego. Jeśli wolisz korzystać z samouczka z gotowym rozwiązaniem, wyświetl lub pobierz przykładowy kod przed rozpoczęciem. Aby uzyskać instrukcje dotyczące pobierania, zobacz Przykłady i samouczki.
Ten artykuł dotyczy testowania projektu platformy .NET Core. Jeśli testujesz projekt ASP.NET Core, zobacz Testy integracyjne w ASP.NET Core.
Tworzenie projektu źródłowego
Otwórz okno powłoki. Utwórz katalog o nazwie unit-testing-vb-mstest w celu przechowywania rozwiązania.
W tym nowym katalogu uruchom polecenie dotnet new sln
, aby utworzyć nowe rozwiązanie. Ta praktyka ułatwia zarządzanie zarówno biblioteką klas, jak i projektem testów jednostkowych.
W katalogu rozwiązania utwórz katalog PrimeService . Do tej pory masz następującą strukturę katalogów i plików:
/unit-testing-vb-mstest
unit-testing-vb-mstest.sln
/PrimeService
Ustaw PrimeService jako bieżący katalog i uruchom dotnet new classlib -lang VB
, aby utworzyć projekt źródłowy. Zmień nazwę Class1.VB na PrimeService.VB. Utwórz nieudaną implementację klasy PrimeService
:
Namespace Prime.Services
Public Class PrimeService
Public Function IsPrime(candidate As Integer) As Boolean
Throw New NotImplementedException("Please create a test first")
End Function
End Class
End Namespace
Zmień katalog z powrotem na katalog unit-testing-vb-using-mstest . Uruchom dotnet sln add .\PrimeService\PrimeService.vbproj
, aby dodać projekt biblioteki klas do rozwiązania.
Tworzenie projektu testowego
Następnie utwórz katalog PrimeService.Tests. W poniższym zarysie przedstawiono strukturę katalogu:
/unit-testing-vb-mstest
unit-testing-vb-mstest.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Ustaw katalog PrimeService.Tests jako bieżący katalog i utwórz nowy projekt przy użyciu dotnet new mstest -lang VB
. To polecenie tworzy projekt testowy, który używa biblioteki MSTest jako biblioteki testowej. Wygenerowany szablon konfiguruje moduł uruchamiający testy w pliku PrimeServiceTests.vbproj:
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.1.18" />
<PackageReference Include="MSTest.TestFramework" Version="1.1.18" />
</ItemGroup>
Projekt testowy wymaga innych pakietów do tworzenia i uruchamiania testów jednostkowych.
dotnet new
w poprzednim kroku dodano narzędzie MSTest. Teraz dodaj bibliotekę klas PrimeService
jako inną zależność do projektu. Użyj polecenia dotnet reference add
:
dotnet reference add ../PrimeService/PrimeService.vbproj
Cały plik można zobaczyć w repozytorium przykładów w witrynie GitHub.
Masz następujący końcowy układ rozwiązania:
/unit-testing-vb-mstest
unit-testing-vb-mstest.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeServiceTests.vbproj
Wykonaj polecenie dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj
w katalogu unit-testing-vb-mstest .
Tworzenie pierwszego testu
Napisz jeden test zakończony niepowodzeniem, wykonaj go pomyślnie, a następnie powtórz ten proces. Usuń UnitTest1.vb z katalogu PrimeService.Tests i utwórz nowy plik języka Visual Basic o nazwie PrimeService_IsPrimeShould.VB. Dodaj następujący kod:
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Namespace PrimeService.Tests
<TestClass>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestMethod>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.IsFalse(result, "1 should not be prime")
End Sub
End Class
End Namespace
Atrybut <TestClass>
wskazuje klasę zawierającą testy. Atrybut <TestMethod>
określa metodę uruchamianą przez moduł uruchamiający testy. W pliku unit-testing-vb-mstest wykonaj polecenie dotnet test
, aby skompilować testy i bibliotekę klas, a następnie uruchomić testy. Moduł uruchamiający testy MSTest zawiera punkt wejścia programu w celu uruchomienia testów.
dotnet test
uruchamia uruchamiacz testów przy użyciu utworzonego przez Ciebie projektu testów jednostkowych.
Test kończy się niepowodzeniem. Nie utworzyłeś jeszcze implementacji. Wykonaj ten test, pisząc najprostszy kod w klasie PrimeService
, która działa:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate = 1 Then
Return False
End If
Throw New NotImplementedException("Please create a test first.")
End Function
W katalogu unit-testing-vb-mstest uruchom dotnet test
ponownie polecenie . Polecenie dotnet test
uruchamia kompilację dla projektu PrimeService
, a następnie dla projektu PrimeService.Tests
. Po utworzeniu obu projektów, wykonuje się ten pojedynczy test. Przechodzi.
Dodawanie większej liczby funkcji
Teraz, gdy zrealizowałeś jeden test, nadszedł czas, aby napisać więcej. Istnieje kilka innych prostych przypadków dla liczb pierwszych: 0, -1. Można dodać te przypadki jako nowe testy z atrybutem <TestMethod>
, ale to szybko staje się żmudne. Istnieją inne atrybuty MSTest, które umożliwiają pisanie zestawu podobnych testów. Możesz użyć atrybutu <DataRow>
wraz z atrybutem <TestMethod>
, aby określić wartości dla tych danych wejściowych.
Zamiast tworzyć nowe testy, zastosuj te dwa atrybuty, aby utworzyć jedną teorię. Teoria jest metodą, która testuje kilka wartości mniejszych niż dwa, co jest najniższą liczbą pierwszą:
<TestClass>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestMethod>
<DataRow(-1)>
<DataRow(0)>
<DataRow(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsFalse(result, $"{value} should not be prime")
End Sub
<TestMethod>
<DataRow(2)>
<DataRow(3)>
<DataRow(5)>
<DataRow(7)>
Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsTrue(result, $"{value} should be prime")
End Sub
<TestMethod>
<DataRow(4)>
<DataRow(6)>
<DataRow(8)>
<DataRow(9)>
Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsFalse(result, $"{value} should not be prime")
End Sub
End Class
Uruchom dotnet test
, a dwa z tych testów kończą się niepowodzeniem. Aby wszystkie testy przeszły, zmień klauzulę if
na początku metody:
if candidate < 2
Kontynuuj iterowanie, dodając więcej testów, więcej teorii i więcej kodu w bibliotece głównej. Masz ukończoną wersję testów i kompletną wersję implementacji biblioteki.
Ty zbudowałeś małą bibliotekę i zestaw testów jednostkowych dla tej biblioteki. Rozwiązanie zostało ustrukturyzowane tak, aby dodawanie nowych pakietów i testów było częścią normalnego przepływu pracy. Skoncentrowałeś większość swojego czasu i wysiłku na osiągnięciu celów aplikacji.