Указание пути вывода теста с использованием ApprovalTests.Net для поддержки нескольких файлов

Я пишу приложение, которое генерирует файлы PDF из разметки HTML (для этого используется сторонняя библиотека).

Я хотел бы иметь возможность одобрить тестирование вывода этих файлов PDF, поэтому я смотрю на ApprovalTests.Net библиотека.

Моя проблема пока ApprovalTests.Net имеет встроенную поддержку проверки равенства PDF, инструмент генерации PDF будет генерировать слегка различную внутреннюю разметку каждый раз, когда файл PDF генерируется. (Имена файлов шрифтов сжаты и рандомизированы, изменение идентификатора файла и т. Д.).

Похоже, что лучший способ добиться хорошего теста одобрения - это сгладить документ PDF в виде серии изображений и использовать двоичное средство сравнения / загрузки различий изображений для проверки документов на утверждение.

Это все довольно тривиально.

Моя проблема возникает при работе с многостраничными PDF-документами. Каждая страница создаст новое изображение, и поэтому мой тест должен пройтись по каждой странице и проверить на соответствие утвержденному файлу.

Я не могу найти какую-либо документацию для указания утвержденного имени файла.

Может ли кто-нибудь с опытом работы со структурой тестов одобрения предоставить какую-либо информацию?

В качестве альтернативы какие-либо другие рамки, которые позволят мне одобрить тестирование коллекции изображений?

Благодарю.

1 ответ

Решение

Создайте новый производный класс ApprovalBinaryWriter, переопределите GetApprovalFilename и GetReceivedFilename и вставьте индекс в конструктор.

public class CustomBinaryWriter : ApprovalBinaryWriter
{
    private readonly int _index;

    public CustomBinaryWriter(byte[] data, string extensionWithoutDot, int index)
        : base(data, extensionWithoutDot)
    {
        _index = index;
    }

    public override string GetApprovalFilename(string basename)
    {
        return string.Format("{0}_{1}{2}{3}", basename, _index, WriterUtils.Approved, ExtensionWithDot);
    }

    public override string GetReceivedFilename(string basename)
    {
        return string.Format("{0}_{1}{2}{3}", basename, _index, WriterUtils.Received, ExtensionWithDot);
    }
}

Тогда вы можете позвонить это с

Approvals.Verify(new CustomBinaryWriter(doc, "png", 1));
Другие вопросы по тегам