Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве вы познакомитесь с интерактивным процессом пошагового создания примерного решения, чтобы изучить концепции модульного тестирования. Если вы предпочитаете следовать руководству с помощью предварительно созданного решения, просмотрите или скачайте пример кода перед началом. Инструкции по скачиванию смотрите в разделах Образцы и руководства.
В этой статье описывается тестирование проекта .NET Core. Если вы тестируете проект ASP.NET Core, см. тесты интеграции в ASP.NET Core.
Предпосылки
- Последняя версия .NET SDK
- Visual Studio Code редактор
- C# DevKit
Создание исходного проекта
Откройте окно оболочки. Создайте каталог с именем unit-testing-using-nunit для хранения решения. В этом новом каталоге выполните следующую команду, чтобы создать новый файл решения для библиотеки классов и тестового проекта:
dotnet new sln
Затем создайте каталог PrimeService . На следующей схеме показаны структура каталога и файлов на данный момент:
/unit-testing-using-nunit
unit-testing-using-nunit.sln
/PrimeService
Сделайте PrimeService текущим каталогом и выполните следующую команду, чтобы создать исходный проект:
dotnet new classlib
Переименуйте Class1.cs в PrimeService.cs. Вы создаете неудачную реализацию класса PrimeService
:
using System;
namespace Prime.Services
{
public class PrimeService
{
public bool IsPrime(int candidate)
{
throw new NotImplementedException("Please create a test first.");
}
}
}
Измените каталог обратно в каталог unit-testing-using-nunit . Выполните следующую команду, чтобы добавить проект библиотеки классов в решение:
dotnet sln add PrimeService/PrimeService.csproj
Создание тестового проекта
Затем создайте каталог PrimeService.Tests. В следующей схеме показана структура каталога:
/unit-testing-using-nunit
unit-testing-using-nunit.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Создайте каталог PrimeService.Tests в текущем каталоге и создайте проект с помощью следующей команды:
dotnet new nunit
Команда dotnet new создает тестовый проект, использующий NUnit в качестве тестовой библиотеки. Созданный шаблон настраивает средство выполнения теста в файле PrimeService.Tests.csproj :
<ItemGroup>
<PackageReference Include="nunit" Version="4.3.2" />
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NUnit.Analyzers" Version="4.6.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
Примечание.
До .NET 9 созданный код может ссылаться на старые версии платформы тестирования NUnit. Вы можете использовать dotnet CLI для обновления пакетов. Кроме того, откройте файл PrimeService.Tests.csproj и замените содержимое группы элементов пакета ссылкой на приведенный выше код.
Тестовый проект требует создания и запуска модульных тестов других пакетов. Команда dotnet new
на предыдущем шаге добавила пакет SDK для тестирования Майкрософт, платформу тестирования NUnit и адаптер тестирования NUnit. Теперь добавьте библиотеку классов PrimeService
в качестве другой зависимости в проект. Используйте команду dotnet add reference
:
dotnet add reference ../PrimeService/PrimeService.csproj
Весь файл можно увидеть в репозитории примеров на сайте GitHub.
В следующей схеме показан окончательный макет решения:
/unit-testing-using-nunit
unit-testing-using-nunit.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.csproj
Выполните следующую команду в каталоге unit-testing-using-nunit :
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
Создание первого теста
Вы пишете провальный тест, добиваетесь его прохождения, а затем повторяете процесс. В каталоге PrimeService.Tests переименуйте файл UnitTest1.cs , чтобы PrimeService_IsPrimeShould.cs и замените все его содержимое следующим кодом:
using NUnit.Framework;
using Prime.Services;
namespace Prime.UnitTests.Services
{
[TestFixture]
public class PrimeService_IsPrimeShould
{
private PrimeService _primeService;
[SetUp]
public void SetUp()
{
_primeService = new PrimeService();
}
[Test]
public void IsPrime_InputIs1_ReturnFalse()
{
var result = _primeService.IsPrime(1);
Assert.That(result, Is.False, "1 should not be prime");
}
}
}
Атрибут [TestFixture]
обозначает класс, содержащий модульные тесты. Атрибут [Test]
указывает, что метод является методом тестирования.
Сохраните этот файл и выполните dotnet test
команду, чтобы создать тесты и библиотеку классов и запустить тесты. Тестовый раннер NUnit является точкой входа программы для выполнения тестов.
dotnet test
запускает средство выполнения тестов, используя проект модульного теста, который вы создали.
Ваш тест не удался. Вы еще не создали реализацию. Сделайте тестовый проход, написав самый простой код в PrimeService
классе, который работает:
public bool IsPrime(int candidate)
{
if (candidate == 1)
{
return false;
}
throw new NotImplementedException("Please create a test first.");
}
В каталоге unit-testing-using-nunit запустите dotnet test
еще раз. Команда dotnet test
запускает сборку для проекта PrimeService
, а затем для проекта PrimeService.Tests
. После сборки обоих проектов он запускает этот одиночный тест. Он проходит.
Добавление дополнительных функций
Теперь, когда вы завершили один тестовый прогон, пора писать больше тестов. Существует несколько других простых случаев для простых чисел: 0, -1. Вы можете добавить новые тесты с атрибутом [Test]
, но это быстро становится утомительным. Существуют другие атрибуты NUnit, позволяющие создавать набор аналогичных тестов. Атрибут [TestCase]
используется для создания набора тестов, которые выполняют один и тот же код, но имеют разные входные аргументы. Вы можете использовать атрибут [TestCase]
для указания значений этих входных данных.
Вместо создания новых тестов примените этот атрибут для создания одного теста на основе данных. Тест на основе данных — это метод, который проверяет несколько значений меньше двух значений, что является самым низким прайм-числом:
[TestCase(-1)]
[TestCase(0)]
[TestCase(1)]
public void IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
var result = _primeService?.IsPrime(value);
Assert.That(result, Is.False, $"{value} should not be prime");
}
Запустите dotnet test
, и два из этих тестов завершаются с ошибкой. Чтобы выполнить все тесты, измените предложение if
в начале метода Main
в файле PrimeService.cs:
if (candidate < 2)
Продолжайте итерацию, добавляя дополнительные тесты, теории и код в основную библиотеку. У вас есть завершенная версия тестов, а полная реализация библиотеки.
Вы создали небольшую библиотеку и набор модульных тестов для этой библиотеки. Вы также структурировали решение таким образом, чтобы добавление новых пакетов и тестов было частью стандартного рабочего процесса. Вы сосредоточили большую часть времени и усилий на решении целей приложения.