【问题标题】:Reading the byte data from an html file generates a different byte array on different machines从 html 文件中读取字节数据会在不同的机器上生成不同的字节数组
【发布时间】:2018-08-21 18:02:29
【问题描述】:

在为使用 Razor 引擎生成 html 的项目进行单元测试时,我发现了一个非常奇怪的场景。

为了让单元测试正确,我对模型进行了硬编码,调用了函数,并保存了生成的 html 代码。我们的业务用户查看了生成的 html 并给予了认可,我们的设计人员检查了 html 代码并表示一切都很好。

我现在有一个 html 文件,我可以用它在单元测试中进行比较,以确保在给定完全相同的模型数据的情况下,对代码的任何更改都不会生成不同的 html 文件。

在我的本地开发机器上,单元测试在比较字节数组 (File.ReadAllBytes(path)) 时通过。然而,在我们的构建代理上,由于额外的 13 个 ASCII 字节,单元测试失败了,这里是字节数组的一部分的 sn-p:

  Build Agent: 111-100-121-62-13-10-32-32-32
Local Machine: 111-100-121-62-10-32-32-32

我不确定这里发生了什么或如何解决这个问题。这是正常的吗?我将如何重写测试来解决这个问题?


附加信息:

  • 构建代理正在运行 Windows Server 2016、Visual Studio 2017 15.7.6
  • 我的本地开发盒运行的是 Windows 10 Enterprise 10.0.14393、Visual Studio 2017 15.8.1

【问题讨论】:

  • 看起来您的构建代理正在使用回车换行作为结束行,而您的本地计算机仅使用换行。你在用Environment.NewLine吗?你的开发盒是 linux 和你的构建代理窗口吗?
  • @JonathonChase:是的,我查找了 ASCII 13,它是 CR,不知道为什么我的本地机器没有生成相同的字节数据。有没有比字节数组更好的方法来比较 html 文件?
  • 你在使用 git 进行版本控制吗?您有可能在开发框中使用 *nix 行尾设置,而构建代理正在使用该设置来签出带有 windows 行尾的文件/使用 *nix 提交,这将导致您要比较的文件签出与回车。如果是这种情况,您可以将 git 属性设置为使用 *nix 行结束设置,as shown here
  • @JonathonChase:是的,我正在使用 VSTS Git、私有构建代理、dotnet 任务、yaml 构建定义。不确定我本地开发人员上的 *nix 行尾设置,我只是使用了 VS 2017 开箱即用的任何支持。

标签: c# html arrays unit-testing


【解决方案1】:

“不同的 html 文件给出完全相同的模型数据”:有无数不同的 HTML 文件在解析时在语义上是等价的,在渲染时甚至更多。

不过,如果您不需要考虑 <pre> 和相关元素中的换行符,那么要克服您的障碍,您可以

//Note: Ignoring newlines because they are believed to be insignificant. No <pre> etc expected.
// This allows newlines to vary across systems and across time.
Func<String, List<String>> splitByLineAndRemoveEmpty = 
    input => Regex.Split(input, @"\r|\n").Where(line => !String.IsNullOrEmpty(line)).ToList();

CollectionAssert.AreEqual(
    splitByLineAndRemoveEmpty(expected), 
    splitByLineAndRemoveEmpty(File.ReadAllText(path)));

这可能会在测试道路上把罐子踢得足够远,暂时不会再打扰任何人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多