TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #3136 2K
День 2612. #Testing
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/
  • 👍 6
More from @netdeveloperdiary
  1. Sep 28, 2026День 2798. #Оффтоп Утиная Типизация в C# с Помощью Перехватчиков. Часть 2 Некоторое время…
  2. Sep 27, 2026День 2797. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Окончание Начало Продол…
  3. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
  4. Sep 25, 2026День 2795. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Начало Проблема с позиц…
  5. Sep 24, 2026День 2794. #Оффтоп #Здоровье Сегодня будет необычный пост. Завтра в Москве стартует конфер…
  6. Sep 23, 2026День 2793. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →