TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #736 1.22K
День шестьсот четвёртый. #Оффтоп
Пишите Тесты Быстрее с Approval Tests
Иногда проверочная (assert) часть в тестах становится большой, беспорядочной и сложной, для понимания, если нам приходится тестировать сложный результат, который выдаёт метод.

Approval Tests - это библиотека, которая может помочь упростить код проверки. Допустим, у нас есть простой генератор отчётов, и мы хотим проверить, что он правильно форматирует отчёт. Рассмотрим следующий тестовый метод:
[Fact]
public void ReportGeneratesCorrectly() {
var lines = new List<string> {
"Line 1", "Line 2", "Line 3"
};

var sut = new ReportGenerator(
title: "Annual Report",
footer: "Copyright 2020",
lines);

string report = sut.Generate();

var results = report.Split(Environment.NewLine);
Assert.Equal("Annual Report", results[0]);
Assert.Equal("Line 1", results[2]);
Assert.Equal("Line 2", results[3]);
Assert.Equal("Line 3", results[4]);
Assert.Equal("Total lines: 3", results[6]);
Assert.Equal("Copyright 2020", results[8]);
}

Вместо нескольких Assert мы могли сравнить результат с одной большой строкой, но, думаю, вы поняли идею. Проблема в том, что приходится писать много кода для проверки результата. А что, если бы результат был более сложным, объёмным или представлял собой двоичный файл, изображение или звуковой файл, результат преобразования текста в речь?

В этих случаях Approval Tests помогут упростить код проверки до единственной строки:
Approvals.Verify(report);

Эта строка вызывает Approval Tests и создаёт в тестовом проекте файл <имя_теста>.received.txt. Вы можете проверить этот файл и, если он верен, переименовать его в <имя_теста>.approved.txt. Когда тест будет запущен в будущем, Approval Tests будут использовать файл approved (который должен быть добавлен в систему управления версиями), и если сгенерированный результат будет таким же, то тест будет пройден, в противном случае тест завершится неудачей, и будет создан новый файл received.

Атрибут [UseReporter] тестового метода позволяет вам указать, как визуализировать ошибки проверки, например, через инструмент diff или ряд других:
[UseReporter(typeof(DiffReporter))]

Если вы хотите подробнее узнать про Approval Tests, посмотрите курс «Approval Tests for .NET» на Pluralsight.

Источник: http://dontcodetired.com/blog/post/Approval-Tests-Write-Tests-More-Quickly
More from @netdeveloperdiary
  1. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  2. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
  3. Oct 5, 2026День 2805. #ЧтоНовенького #NET11 Аргументы в Выражениях Коллекций в C#15 В C#15 реализован…
  4. Oct 4, 2026День 2804. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  5. Oct 3, 2026Post #3360
  6. Oct 3, 2026День 2803. #Оффтоп Чем Заняться, Пока Работают Агенты? У VS Code Есть Ответ Сейчас большую…
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 →