Пишите Тесты Быстрее с Approval Tests
Иногда проверочная (assert) часть в тестах становится большой, беспорядочной и сложной, для понимания, если нам приходится тестировать сложный результат, который выдаёт метод.
Approval Tests - это библиотека, которая может помочь упростить код проверки. Допустим, у нас есть простой генератор отчётов, и мы хотим проверить, что он правильно форматирует отчёт. Рассмотрим следующий тестовый метод:
[Fact]Вместо нескольких Assert мы могли сравнить результат с одной большой строкой, но, думаю, вы поняли идею. Проблема в том, что приходится писать много кода для проверки результата. А что, если бы результат был более сложным, объёмным или представлял собой двоичный файл, изображение или звуковой файл, результат преобразования текста в речь?
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]);
}
В этих случаях 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