使用 ApprovalTests.Net 指定测试输出路径以支持多个文件

本文关键字:支持 文件 路径 输出 Net ApprovalTests 测试 使用 | 更新日期: 2023-09-27 18:36:59

我正在编写一个从HTML标记生成PDF文件的应用程序(使用第三方库来这样做)。

我希望能够批准测试这些 PDF 文件的输出,因此我一直在查看ApprovalTests.Net库。

我的问题是,虽然ApprovalTests.Net对 PDF 相等性检查有本机支持,但每次生成 PDF 文件时,PDF 生成工具都会生成略有不同的内部标记。(字体文件名被压缩和随机化,文件ID的更改等)。

似乎实现良好批准测试的最佳方法是将PDF文档展平为一系列图像,并使用二进制比较/加载图像差异工具来批准测试文档。

这一切都是相当微不足道的。

处理多页 pdf 文档时会出现我的问题。每个页面都会生成一个新图像,因此我的测试需要遍历每个页面并根据批准的文件进行检查。

我似乎找不到任何文档来指定批准的文件名。

任何有使用批准测试框架经验的人都可以提供任何见解吗?

或者,任何其他

框架可以允许我批准测试图像集合吗?

谢谢。

使用 ApprovalTests.Net 指定测试输出路径以支持多个文件

创建一个新的派生类 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));