Модульное тестирование библиотек .NET Core в Visual Basic с использованием dotnet test и NUnit
Статья
Этот учебник описывает пошаговую процедуру по созданию примера решения для изучения концепций модульного тестирования. Если при изучении учебника вы предпочитаете использовать готовое решение, просмотрите или скачайте пример кода перед началом работы. Инструкции по загрузке см. в разделе Просмотр и скачивание примеров.
Эта статья посвящена тестированию проекта .NET Core. Если вы тестируете проект ASP.NET Core, ознакомьтесь с тестами интеграции в ASP.NET Core.
Текстовый редактор или редактор кода по вашему выбору.
Создание исходного проекта
Откройте окно оболочки. Создайте каталог с именем unit-testing-vb-nunit для хранения решения. В этом каталоге выполните следующую команду, чтобы создать файл решения для библиотеки классов и тестового проекта:
Интерфейс командной строки.NET
dotnetnewsln
Затем создайте каталог PrimeService. Ниже приведена актуальная структура файлов:
Перейдите в каталог PrimeService.Tests и создайте проект, выполнив следующую команду:
Интерфейс командной строки.NET
dotnetnew nunit -lang VB
Команда dotnet new создает тестовый проект, который использует NUnit в качестве библиотеки тестов. Созданный шаблон позволяет настроить средство выполнения тестов в файле PrimeServiceTests.vbproj:
До .NET 9 созданный код может ссылаться на старые версии платформы тестирования NUnit. Вы можете использовать dotnet CLI для обновления пакетов. Кроме того, откройте файл PrimeService.Tests.vbproj и замените содержимое группы элементов ссылки на пакет приведенным выше кодом.
Тестовый проект требует других пакетов для создания и выполнения модульных тестов. Команда dotnet new на предыдущем шаге добавляет NUnit и адаптер тестирования NUnit. Теперь добавьте в проект библиотеку классов PrimeService в качестве еще одной зависимости. Используйте команду dotnet add reference:
Напишите один тест сбоя теста, запустите его, а затем повторите этот процесс. В каталоге PrimeService.Tests переименуйте файл UnitTest1.vb в PrimeService_IsPrimeShould.VB и замените его содержимое следующим кодом:
VB
Imports NUnit.Framework
Namespace PrimeService.Tests
<TestFixture>
PublicClass PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<Test>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result AsBoolean = _primeService.IsPrime(1)
Assert.That(result, [Is].False, $"1 should not be prime")
EndSubEndClassEndNamespace
Атрибут <TestFixture> указывает класс, который содержит тесты. Атрибут <Test> обозначает метод, который выполняется с помощью средства выполнения тестов. Из каталога unit-testing-vb-nunit выполните команду dotnet test для создания тестов и библиотеки классов, а затем выполните тесты. Средство запуска тестов NUnit содержит точку входа в программу для выполнения тестов. dotnet test запускает средство выполнения тестов с помощью проекта модульного теста, который вы создали.
Тест не будет пройден. Вы еще не создали реализацию. Чтобы тест был пройден, напишите простейший код в классе PrimeService, который работает:
VB
PublicFunction IsPrime(candidate AsInteger) AsBooleanIf candidate = 1ThenReturnFalseEndIfThrowNew NotImplementedException("Please create a test first.")
EndFunction
Выполните команду dotnet test еще раз в каталоге unit-testing-vb-nunit. Команда dotnet test запускает сборку для проекта PrimeService и затем для проекта PrimeService.Tests. После сборки обоих проектов она запускает этот отдельный тест. Он выполняется.
Добавление дополнительных возможностей
Теперь, когда тест проходит успешно, пора создать дополнительные тесты. Есть еще ряд элементарных случаев с простыми числами: 0, -1. Можно добавить их в качестве тестов с помощью атрибута <Test>, но это скоро станет утомительным. Есть другие атрибуты xUnit, которые позволяют создавать наборы похожих тестов. Атрибут <TestCase> представляет набор тестов, которые выполняют один и тот же код, но имеют разные входные аргументы. С помощью атрибута <TestCase> можно указать значения для этих входных аргументов.
Вместо создания тестов примените эти два атрибута, чтобы создать последовательность тестов, которая проверяет несколько значений меньше 2, то есть наименьшего простого числа.
VB
<TestFixture>
PublicClass PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestCase(-1)>
<TestCase(0)>
<TestCase(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value AsInteger)
Dim result AsBoolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
EndSub
<TestCase(2)>
<TestCase(3)>
<TestCase(5)>
<TestCase(7)>
PublicSub IsPrime_PrimesLessThan10_ReturnTrue(value AsInteger)
Dim result AsBoolean = _primeService.IsPrime(value)
Assert.That(result, [Is].True, $"{value} should be prime")
EndSub
<TestCase(4)>
<TestCase(6)>
<TestCase(8)>
<TestCase(9)>
PublicSub IsPrime_NonPrimesLessThan10_ReturnFalse(value AsInteger)
Dim result AsBoolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
EndSubEndClass
Выполните команду dotnet test, и два из этих тестов завершаются ошибкой. Для успешного выполнения всех тестов нужно изменить предложение if в начале метода Main в файле PrimeServices.cs:
Вы создали небольшую библиотеку и набор модульных тестов для нее. Вы структурировали решение, чтобы сделать добавление новых пакетов и тестов частью обычного рабочего процесса и получить возможность сосредоточиться на задачах приложения.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.
Start testing your C# apps by using the testing tools in Visual Studio. Learn to write tests, use Test Explorer, create test suites, and apply the red, green, refactor pattern to write code.