Язык программирования C#9 и платформа .NET5
Шрифт:
using AutoLot.Dal.Tests.Base;
using AutoLot.Models.Entities;
using Microsoft.EntityFrameworkCore;
using Xunit;
namespace AutoLot.Dal.Tests.IntegrationTests
{
[Collection("Integation Tests")]
public class CustomerTests : BaseTest,
IClassFixture<EnsureAutoLotDatabaseTestFixture>
{
}
}
// MakeTests.cs
using System.Linq;
using AutoLot.Dal.Repos;
using AutoLot.Dal.Repos.Interfaces;
using AutoLot.Dal.Tests.Base;
using AutoLot.Models.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Xunit;
namespace AutoLot.Dal.Tests.IntegrationTests
{
[Collection("Integation Tests")]
public class MakeTests : BaseTest,
IClassFixture<EnsureAutoLotDatabaseTestFixture>
{
}
}
// OrderTests.cs
using System.Linq;
using AutoLot.Dal.Repos;
using AutoLot.Dal.Repos.Interfaces;
using AutoLot.Dal.Tests.Base;
using Microsoft.EntityFrameworkCore;
using Xunit;
namespace AutoLot.Dal.Tests.IntegrationTests
{
[Collection("Integation Tests")]
public class OrderTests : BaseTest,
IClassFixture<EnsureAutoLotDatabaseTestFixture>
{
}
}
Добавьте
MakeTests
конструктор, который создает экземпляр MakeRepo
и присваивает его закрытой переменной readonly
уровня класса. Переопределите метод Dispose
и освободите в нем экземпляр MakeRepo
:
[Collection("Integration Tests")]
public class MakeTests : BaseTest,
IClassFixture<EnsureAutoLotDatabaseTestFixture>
{
private readonly IMakeRepo _repo;
public MakeTests
{
_repo = new MakeRepo(Context);
}
public override void Dispose
{
_repo.Dispose;
}
...
}
Повторите те же действия для класса
OrderTests
, но с использованием OrderRepo
вместо MakeRepo
:
[Collection("Integration Tests")]
public class OrderTests : BaseTest,
IClassFixture<EnsureAutoLotDatabaseTestFixture>
{
private readonly IOrderRepo _repo;
public OrderTests
{
_repo = new OrderRepo(Context);
}
public override void Dispose
{
_repo.Dispose;
}
...
}
Тестовые методы [Fact] и [Theory]
Тестовые методы без параметров называются фактами (и задействуют атрибут
[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
), разработчикам лучше использовать для этого Visual Studio. Выберите в меню Test (Тестирование) пункт Test Explorer (Проводник тестов), чтобы получить возможность прогонять и отлаживать все или выбранные тесты.
Поделиться с друзьями: