Язык программирования C#9 и платформа .NET5
public static void InitializeData(ApplicationDbContext context){DropAndCreateDatabase(context);SeedData(context);}public static void ClearAndReseedDatabase(ApplicationDbContext context){ClearData(context);SeedData(context);}Настройка тестов
Вместо создания клиентского приложения для испытания скомпилированного уровня доступа к данным
будет применяться автоматизированное интеграционное тестирование. Тесты продемонстрируют обращение к базе данных на предмет создания, чтения, обновления и удаления, что позволит исследовать код без накладных расходов по построению еще одного приложения. Каждый тест, рассматриваемый в этом разделе, будет выполнять запрос (создание, чтение, обновление или удаление) и иметь один и более операторовAutoLotдля проверки, получен ли ожидаемый результат.AssertСоздание проекта
Первым делом необходимо настроить платформу интеграционного тестирования с использованием xUnit — инфраструктуры тестирования, совместимой с .NET Core. Начните с добавления нового по имени
, который в Visual Studio носит название xUnit Test Project (.NET Core) (Проект тестирования xUnit (.NET Core)).AutoLot.Dal.TestsНа заметку! Модульные тесты предназначены для тестирования одной единицы кода. Формально повсюду в главе создаются интеграционные тесты, т.к. производится тестирование кода C# и EF Core на всем пути к базе данных и обратно.
Введите следующую команду в окне командной строки:
dotnet new xunit -lang c# -n AutoLot.Dal.Tests -o .\AutoLot.Dal.Tests -f net5.0dotnet sln .\Chapter23_AllProjects.sln add AutoLot.Dal.TestsДобавьте в проект
перечисленные ниже пакеты NuGet:AutoLot.Dal.TestsMicrosoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.SqlServerMicrosoft.Extensions.Configuration.JsonПоскольку версия пакета Microsoft.NET.Test.Sdk, поставляемая с шаблоном проектов xUnit, обычно отстает от текущей доступной версии, воспользуйтесь диспетчером пакетов NuGet для обновления всех пакетов NuGet. Затем добавьте ссылки на проекты
иAutoLot.Models.AutoLot.DalВ случае работы с CLI выполните приведенные далее команды(обратите внимание, что команды удаляют и повторно добавляют пакет
, чтобы гарантировать ссылку на самую последнюю версию):Microsoft.NET.Test.Sdkdotnet add AutoLot.Dal.Tests package Microsoft.EntityFrameworkCoredotnet add AutoLot.Dal.Tests package Microsoft.EntityFrameworkCore.SqlServerdotnet add AutoLot.Dal.Tests package Microsoft.Extensions.Configuration.Jsondotnet remove AutoLot.Dal.Tests package Microsoft.NET.Test.Sdkdotnet add AutoLot.Dal.Tests package Microsoft.NET.Test.Sdkdotnet add AutoLot.Dal.Tests reference AutoLot.Daldotnet add AutoLot.Dal.Tests reference AutoLot.ModelsКонфигурирование проекта
Для извлечения строки подключения во время выполнения будут задействованы конфигурационные возможности .NET Core, предусматривающие работу с файлом JSON. Добавьте в проект файл JSON по имени
и поместите в него информацию о своей строке подключения в следующем формате (надлежащим образом скорректировав ее):appsettings.json{"ConnectionStrings": {"AutoLot": "server=.,5433;Database=AutoLotFinal;User Id=sa;Password=P@ssw0rd;"}}Модифицируйте файл проекта, чтобы файл
копировался в выходной каталог при каждой компиляции проекта, для чего добавьте в файлappsettings.jsonтакой элементAutoLot.Dal.Tests.csproj:ItemGroup<ItemGroup><None Update="appsettings.json"><CopyToOutputDirectory>Always</CopyToOutputDirectory></None></ItemGroup>Создание класса TestHelpers
Класс
будет обрабатывать конфигурацию приложения, а также создавать новый экземплярTestHelpers. Создайте в корневом каталоге проекта новый файл открытого статического класса по имениApplicationDbContext. Приведите операторыTestHelpers.csк следующему виду:usingusing System.IO;using AutoLot.Dal.EfStructures;using Microsoft.EntityFrameworkCore;using Microsoft.EntityFrameworkCore.Storage;using Microsoft.Extensions.Configuration;namespace AutoLot.Dal.Tests{public static class TestHelpers{}}Определите два открытых статических метода, предназначенные для создания экземпляров реализации
и классаIConfiguration. Добавьте в класс показанный ниже код:ApplicationDbContextpublic static IConfiguration GetConfiguration() =>