Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве вы познакомитесь с интерактивным процессом пошагового создания примерного решения, чтобы изучить концепции модульного тестирования.
В этой статье описывается тестирование проекта .NET Core. Если вы тестируете проект ASP.NET Core, см. тесты интеграции в ASP.NET Core.
Prerequisites
- .NET 10 SDK или более поздняя версия.
- Текстовый редактор или редактор кода по вашему выбору.
TUnit полностью построен на Microsoft. Testing.Platform (MTP) и не поддерживает VSTest. В этом руководстве используется режим dotnet testMTP, для которого требуется пакет SDK .NET 10.
Создание исходного проекта
Откройте окно терминала. Создайте каталог с именем unit-testing-vb-tunit для хранения решения. В этом новом каталоге выполните следующую команду, чтобы создать новый файл решения для библиотеки классов и тестового проекта:
dotnet new sln
Затем создайте каталог PrimeService . На следующем рисунке показана структура файлов до сих пор:
/unit-testing-vb-tunit
unit-testing-vb-tunit.slnx
/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-tunit. Выполните следующую команду, чтобы добавить проект библиотеки классов в решение:
dotnet sln add ./PrimeService/PrimeService.vbproj
Создание тестового проекта
Затем создайте каталог PrimeService.Tests. В следующей схеме показана структура каталога:
/unit-testing-vb-tunit
unit-testing-vb-tunit.slnx
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Шаблоны проектов TUnit не включены в пакет SDK .NET. Установите их с помощью следующей команды:
dotnet new install TUnit.Templates
Создайте каталог PrimeService.Tests в текущем каталоге и создайте проект с помощью следующей команды:
dotnet new TUnit -lang VB
Note
Короткие имена шаблонов чувствительны к регистру. Используйте TUnit, а не tunit.
Команда dotnet new создает тестовый проект, использующий TUnit в качестве тестовой библиотеки. Созданный файл PrimeService.Tests.vbproj — это исполняемый проект, который ссылается на TUnit пакет, который включает платформу тестирования, библиотеку утверждений и модуль выполнения тестов MTP, поэтому проект не нуждается в других пакетах тестирования.
Шаблон также добавляет образцы тестов. Удалите все файлы .vb и каталог Data из каталога PrimeService.Tests, так как это руководство заменяет их собственными тестами.
Теперь добавьте библиотеку классов PrimeService в качестве другой зависимости в проект. Используйте команду dotnet reference add:
dotnet reference add ../PrimeService/PrimeService.vbproj
У вас есть следующий окончательный макет решения:
/unit-testing-vb-tunit
unit-testing-vb-tunit.slnx
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.vbproj
Выполните следующую команду в каталоге unit-testing-vb-tunit :
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
Настройка режима MTP для dotnet test
Так как TUnit не поддерживает VSTest, dotnet test должен выполняться в режиме MTP. В каталоге unit-testing-vb-tunit создайте файл global.json со следующим содержимым:
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
Дополнительные сведения см. в режиме MTP dotnet test.
Создание первого теста
Вы пишете один не проходящий тест, делаете его успешным, а затем повторяете процесс. В каталоге PrimeService.Tests создайте файл PrimeService_IsPrimeShould.vb со следующим кодом:
Imports TUnit.Assertions
Imports TUnit.Assertions.Extensions
Imports TUnit.Core
Namespace PrimeService.Tests
Public Class PrimeService_IsPrimeShould
Private ReadOnly _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<Test>
Public Async Function IsPrime_InputIs1_ReturnFalse() As Task
Dim result As Boolean = _primeService.IsPrime(1)
Await Assert.That(result).IsFalse()
End Function
End Class
End Namespace
Атрибут <Test> обозначает метод, выполняемый тестировщиком. TUnit не требует атрибута у класса. Утверждения TUnit являются асинхронными, поэтому тест — это Async Function, который возвращает Task и ожидает Assert.That.
Visual Basic помещает код в каждый проект в корневое пространство имен проекта, поэтому PrimeService класс находится в PrimeService.Prime.Services пространстве имен. Тест обозначает его как Prime.Services.PrimeService, поскольку в пространствах имен тестового проекта имя PrimeService относится к пространству имен, а не к классу.
В каталоге unit-testing-vb-tunit выполните dotnet test, чтобы собрать тесты и библиотеку классов, а затем запустите тесты. Тестовый проект TUnit содержит точку входа программы для выполнения тестов.
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-tunit запустите dotnet test еще раз. Команда dotnet test запускает сборку для проекта PrimeService, а затем для проекта PrimeService.Tests. После создания обоих проектов он запускает этот единичный тест. Это пройдет.
Добавление дополнительных функций
Теперь, когда вы выполнили один тест, пришло время написать больше тестов. Существует несколько других простых случаев для простых чисел: 0, -1. Эти случаи можно добавить в качестве новых тестов с помощью атрибута <Test>, но это быстро становится мучительно. TUnit предоставляет <Arguments> атрибут для создания набора тестов, которые выполняют один и тот же код, но имеют разные входные аргументы.
Вместо создания новых тестов примените этот атрибут для создания одного теста на основе данных. Замените функцию IsPrime_InputIs1_ReturnFalse следующим кодом, который проверяет несколько значений меньше двух — наименьшего простого числа:
<Test>
<Arguments(-1)>
<Arguments(0)>
<Arguments(1)>
Public Async Function IsPrime_ValuesLessThan2_ReturnFalse(value As Integer) As Task
Dim result As Boolean = _primeService.IsPrime(value)
Await Assert.That(result).IsFalse()
End Function
Запустите dotnet test, и два из этих тестов завершаются с ошибкой. Чтобы выполнить все тесты, измените If условие в начале IsPrime метода в файле PrimeService.vb:
If candidate < 2 Then
Продолжайте итерацию, добавляя дополнительные тесты и дополнительный код в основную библиотеку.
Вы создали небольшую библиотеку и набор модульных тестов для этой библиотеки. Вы структурировали решение таким образом, чтобы добавление новых пакетов и тестов было частью обычного рабочего процесса. Вы сосредоточили большую часть времени и усилий на решении целей приложения.