Тестовые методы без параметров называются
[Fact]). Тестовые методы, которые принимают параметры, называются [Theory]) и могут выполнять множество итераций с разными значениями, передаваемыми в качестве параметров. Чтобы взглянуть на такие виды тестов, создайте в проекте AutoLot.Dal.Tests новый файл класса по имени SampleTests.cs. Вот как выглядит оператор using:using Xunit;
namespace AutoLot.Dal.Tests
{
public class SampleTests
{
}
}
Начните с создания теста [Fact]
[Fact] все значения содержатся внутри тестового метода. Следующий простой пример проверяет, что 3 + 2 = 5:[Fact]
public void SimpleFactTest()
{
Assert.Equal(5,3+2);
}
Что касается теста [Theory]
[InlineData], методов или классов. Здесь будет использоваться только атрибут [InlineData]. Создайте показанный ниже тест, которому предоставляются разные слагаемые и ожидаемый результат:[Theory]
[InlineData(3,2,5)]
[InlineData(1,-1,0)]
public void SimpleTheoryTest(int addend1, int addend2, int expectedResult)
{
Assert.Equal(expectedResult,addend1+addend2);
}
На заметку!
За дополнительными сведениями об инфраструктуре тестирования xUnit обращайтесь в документацию по ссылкеhttps://xunit.net/.Выполнение тестов
Хотя тесты xUnit можно запускать из командной строки (с применением dotnet test
Запрашивание базы данных
Вспомните, что создание экземпляров сущностей из базы данных обычно предусматривает выполнение оператора LINQ в отношении свойств DbSet
FromSqlRaw() или FromSqlInterpolated() с применением низкоуровневых запросов SQL. Сущности, загружаемые в коллекции DbSet, по умолчанию добавляются в ChangeTracker, но отслеживание можно отключать. Данные, загружаемые в коллекции DbSet без ключей, никогда не отслеживаются.Если связанные сущности уже загружены в DbSet
Car загружаются в коллекцию DbSet и затем связанные сущности Order загружаются в коллекцию DbSet того же самого экземпляра ApplicationDbContext, то навигационное свойство Car.Orders будет возвращать связанные сущности без повторного запрашивания базы данных.Многие демонстрируемые здесь методы имеют асинхронные версии. Синтаксис запросов LINQ структурно одинаков, поэтому будут использоваться только синхронные версии.
Состояние сущности
Когда сущность создается за счет чтения данных из базы, значение EntityState
Unchanged.Запросы LINQ
Тип коллекции DbSet
IQueryable, что позволяет применять команды LINQ языка C# для создания запросов, извлекающих информацию из базы данных. Наряду с тем, что все операторы LINQ языка C# доступны для использования с типом коллекции DbSet, некоторые операторы LINQ могут не поддерживаться поставщиком баз данных, а в EF Core появились дополнительные операторы LINQ. Неподдерживаемый оператор LINQ, который невозможно транслировать в язык запросов поставщика баз данных, приведет к генерации исключения времени выполнения, если только он не является последним в цепочке операторов LINQ. Когда неподдерживаемый оператор LINQ находится в самом конце цепочки LINQ, он выполнится на клиентской стороне (в коде С#).На заметку!
Настоящая книга не задумывалась как полный справочник по LINQ, так что в ней приводится не особо много примеров. С дополнительными примерами запросов LINQ можно ознакомиться по ссылкеhttps://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b.Выполнение запросов LINQ