TUnit – Новый Фреймворк Тестирования в .NET. Продолжение
Начало
Особенности 1-3
4. Передача данных в тесты
1) Аргументы уровня компиляции
[Test]
[Arguments(1, 2, 3)]
[Arguments(4, 5, 9)]
public async Task Addition(
int a, int b, int expected)
{
await Assert.That(a + b).IsEqualTo(expected);
}
2) Метод-источник (динамические данные)
[Test]
[MethodDataSource(nameof(TestCases))]
public async Task WithDynamicData(
int value, string expected)
{
var result = ProcessValue(value);
await Assert.That(result).IsEqualTo(expected);
}
public static
IEnumerable<(int, string)> TestCases()
{
yield return (1, "one");
yield return (2, "two");
yield return (3, "three");
}
3) Матричные тесты (комбинаторные)
[Test]
public async Task MatrixCombinations(
[Matrix(1, 2, 3)] int x,
[Matrix("a", "b")] string y,
[Matrix(true, false)] bool z)
{
// 3 × 2 × 2 = 12 комбинаций
await Assert.That(Validate(x, y, z)).IsTrue();
}
4) Класс-источник
[ClassDataSource<UserFixture>(Shared = SharedType.PerClass)]
public class UserServiceTests
{
[Test]
public async Task CreateUser(UserFixture fixture)
{
var user = await
fixture.Service.CreateAsync("John");
await Assert.That(user.Name).IsEqualTo("John");
}
}
public class UserFixture
{
public IUserService Service { get; }
= new UserService();
}
Как видите, TUnit поддерживает практически все функции, предлагаемые существующими фреймворками, часто усовершенствованные и модернизированные.
5. Жизненный цикл тестов и фикстур
public class TestLifecycleExample
{
private DatabaseConnection _conn;
// Перед каждым тестом
[Before(Test)]
public async Task SetupTest()
{
_conn = new DatabaseConnection();
await _conn.OpenAsync();
}
[Test]
public async Task DatabaseQuery()
{
var result =
await _conn.QueryAsync("SELECT * FROM Users");
await Assert.That(result).IsNotNull();
}
// После каждого теста
[After(Test)]
public async Task CleanupTest()
{
await _conn.CloseAsync();
_conn?.Dispose();
}
// Однажды на тестовый класс
[Before(Class)]
public static async Task SetupClass()
{
// Инициализация общих ресурсов
}
[After(Class)]
public static async Task CleanupClass()
{
// Очистка общих ресурсов
}
// Однажды на сборку
[Before(Assembly)]
public static async Task SetupAssembly()
{
// Инициализация данных уровня приложения
}
}
Окончание следует…
Источник: https://trailheadtechnology.com/tunit-the-new-sheriff-in-town-for-net-testing/