在为使用Razor引擎生成html的项目进行单元测试时,我发现了一个非常奇怪的场景。
为了使单元测试正确,我对模型硬编码,称为函数,并保存了生成的html代码。我们的业务用户查看了生成的html并给予了认可,我们的设计师检查了html代码并说一切看起来都很好。
我现在有一个html文件,可以在单元测试中与之比较,以确保在给定完全相同的模型数据的情况下,对代码的任何更改都不会产生不同的html文件。
在我的本地开发计算机上,比较字节数组(File.ReadAllBytes(path)
)时,单元测试通过。但是,在我们的构建代理上,单元测试由于额外的ASCII 13个字节而失败,这是字节数组的一部分片段:
Build Agent: 111-100-121-62-13-10-32-32-32
Local Machine: 111-100-121-62-10-32-32-32
我不确定这是怎么回事或如何解决。这正常吗?我将如何重写测试以解决此问题?
其他信息:
答案 0 :(得分:0)
“给定完全相同的模型数据的不同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)));
这可能会使测试罐走得更远,以至于在一段时间内不会再困扰任何人。