【问题标题】:Specifying the test output path using ApprovalTests.Net to support multiple files使用 ApprovalTests.Net 指定测试输出路径以支持多个文件
【发布时间】:2016-03-02 10:54:00
【问题描述】:

我正在编写一个从 HTML 标记生成 PDF 文件的应用程序(使用第三方库来执行此操作)。

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

我的问题是,虽然ApprovalTests.Net 具有对 PDF 相等检查的本机支持,但 PDF 生成工具将在每次生成 PDF 文件时生成细微不同的内部标记。 (字体文件名被压缩和随机化,文件 id 的变化等)。

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

这一切都很简单。

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

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

任何有使用 Approval Tests 框架经验的人都可以提供任何见解吗?

或者任何其他允许我批准测试图像集合的框架?

谢谢。

【问题讨论】:

    标签: c# asp.net pdf approval-tests


    【解决方案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));
    

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 2022-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多