Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве вы познакомитесь с интерактивным процессом пошагового создания примерного решения, чтобы изучить концепции модульного тестирования. Если вы предпочитаете следовать руководству с помощью предварительно созданного решения, просмотрите или скачайте пример кода перед началом. Инструкции по скачиванию смотрите в разделах Образцы и руководства.
В этой статье описывается тестирование проекта .NET Core. Если вы тестируете проект ASP.NET Core, см. тесты интеграции в ASP.NET Core.
Предпосылки
- Пакет SDK для .NET 8 или более поздние версии.
- Текстовый редактор или редактор кода по вашему выбору.
Создание исходного проекта
Откройте окно терминала. Создайте каталог с именем unit-testing-vb-nunit для хранения решения. В этом новом каталоге выполните следующую команду, чтобы создать новый файл решения для библиотеки классов и тестового проекта:
dotnet new sln
Затем создайте каталог PrimeService . На следующем рисунке показана структура файлов до сих пор:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Сделайте PrimeService текущим каталогом и выполните следующую команду, чтобы создать исходный проект:
dotnet new classlib -lang VB
Переименуйте Class1.VB в PrimeService.VB. Вы создаете неудачную реализацию класса 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
Измените каталог обратно в каталог unit-testing-vb-using-mstest. Выполните следующую команду, чтобы добавить проект библиотеки классов в решение:
dotnet sln add .\PrimeService\PrimeService.vbproj
Создание тестового проекта
Затем создайте каталог PrimeService.Tests. В следующей схеме показана структура каталога:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Создайте каталог PrimeService.Tests в текущем каталоге и создайте проект с помощью следующей команды:
dotnet new nunit -lang VB
Команда dotnet new создает тестовый проект, использующий NUnit в качестве тестовой библиотеки. Созданный шаблон настраивает средство выполнения теста в файле PrimeServiceTests.vbproj :
<ItemGroup>
<PackageReference Include="nunit" Version="4.3.2" />
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
</ItemGroup>
Замечание
До .NET 9 созданный код может ссылаться на старые версии платформы тестирования NUnit. Вы можете использовать dotnet CLI для обновления пакетов. Кроме того, откройте файл PrimeService.Tests.vbproj и замените содержимое группы элементов ссылки на пакет приведенным выше кодом.
Тестовый проект требует создания и запуска модульных тестов других пакетов.
dotnet new
на предыдущем шаге добавлен NUnit и адаптер теста NUnit. Теперь добавьте библиотеку классов PrimeService
в качестве другой зависимости в проект. Используйте команду dotnet reference add
:
dotnet reference add ../PrimeService/PrimeService.vbproj
Весь файл можно увидеть в репозитории примеров на сайте GitHub.
У вас есть следующий окончательный макет решения:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.vbproj
Выполните следующую команду в каталоге unit-testing-vb-nunit :
dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj
Создание первого теста
Вы пишете один не проходящий тест, делаете его успешным, а затем повторяете процесс. В каталоге PrimeService.Tests переименуйте файл UnitTest1.vb на PrimeService_IsPrimeShould.VB и замените все его содержимое следующим кодом:
Imports NUnit.Framework
Namespace PrimeService.Tests
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<Test>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.That(result, [Is].False, $"1 should not be prime")
End Sub
End Class
End Namespace
Атрибут <TestFixture>
указывает класс, содержащий тесты. Атрибут <Test>
обозначает метод, выполняемый тестировщиком. Из unit-testing-vb-nunit выполните dotnet test
для сборки тестов и библиотеки классов, а затем запустите тесты. Тестовый раннер NUnit является точкой входа программы для выполнения тестов.
dotnet test
запускает средство выполнения тестов, используя проект модульного теста, который вы создали.
Ваш тест не удался. Вы еще не создали реализацию. Выполните этот тест, написав самый простой код в классе PrimeService
, который работает:
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
В каталоге unit-testing-vb-nunit запустите dotnet test
еще раз. Команда dotnet test
запускает сборку для проекта PrimeService
, а затем для проекта PrimeService.Tests
. После создания обоих проектов он запускает этот единичный тест. Это пройдет.
Добавление дополнительных функций
Теперь, когда вы выполнили один тест, пришло время написать больше тестов. Существует несколько других простых случаев для простых чисел: 0, -1. Эти случаи можно добавить в качестве новых тестов с помощью атрибута <Test>
, но это быстро становится мучительно. Существуют другие атрибуты xUnit, позволяющие создавать набор аналогичных тестов. Атрибут <TestCase>
представляет набор тестов, которые выполняют один и тот же код, но имеют разные входные аргументы. Вы можете использовать атрибут <TestCase>
для указания значений этих входных данных.
Вместо создания новых тестов примените эти два атрибута для создания серии тестов, которые проверяют несколько значений менее двух, что является самым низким прайм-числом:
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestCase(-1)>
<TestCase(0)>
<TestCase(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
<TestCase(2)>
<TestCase(3)>
<TestCase(5)>
<TestCase(7)>
Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].True, $"{value} should be prime")
End Sub
<TestCase(4)>
<TestCase(6)>
<TestCase(8)>
<TestCase(9)>
Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
End Class
Запустите dotnet test
, и два из этих тестов завершаются с ошибкой. Чтобы выполнить все тесты, измените if
предложение в начале Main
метода в файле PrimeServices.cs :
if candidate < 2
Продолжайте итерацию, добавляя дополнительные тесты, дополнительные теории и другие коды в основной библиотеке. У вас есть завершенная версия тестов, а полная реализация библиотеки.
Вы создали небольшую библиотеку и набор модульных тестов для этой библиотеки. Вы структурировали решение таким образом, чтобы добавление новых пакетов и тестов было частью обычного рабочего процесса. Вы сосредоточили большую часть времени и усилий на решении целей приложения.