【发布时间】: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
-
保存器 LF,CR:stackoverflow.com/a/23014006/3142139
-
@JonathonChase:是的,我正在使用 VSTS Git、私有构建代理、dotnet 任务、yaml 构建定义。不确定我本地开发人员上的 *nix 行尾设置,我只是使用了 VS 2017 开箱即用的任何支持。
标签: c# html arrays unit-testing