C# 针对html的断言

C# 针对html的断言,c#,html,.net,asp.net-mvc,unit-testing,C#,Html,.net,Asp.net Mvc,Unit Testing,我特别想在.NETMVC环境中寻找解决方案,但是这个问题适用于所有语言和框架 我目前正在单元测试一个HtmlHelper扩展(对于那些不是.NETMVC流利的人来说,这是一个返回html字符串的函数) 现在我的问题是,即使字符串不相等,html也可能有效 假设我想要断言我的方法输出 <div class="myClass" id="myId" >Hello</div> 你好 然而,它实际输出 <div id="myId" class="myClass" >

我特别想在.NETMVC环境中寻找解决方案,但是这个问题适用于所有语言和框架

我目前正在单元测试一个HtmlHelper扩展(对于那些不是.NETMVC流利的人来说,这是一个返回html字符串的函数)

现在我的问题是,即使字符串不相等,html也可能有效

假设我想要断言我的方法输出

<div class="myClass" id="myId" >Hello</div>
你好 然而,它实际输出

<div id="myId" class="myClass" >Hello</div>
你好 这仍然有效,对吗?
现在我可能在食言,但我还没有看到任何东西可以说这些事实上是平等的

我相信这两者是相等的,因为在浏览器中渲染时,它们基本上是相同的


是否有支持这种比较的库?(特别是c#.net;不过我也对其他语言感兴趣)

我不确定,但HtmlAgilityPack()可以帮你解决这个问题。它可以将html解析为表示html的dom的对象。在您的例子中,我想dom应该是相同的,或者至少比较两个解析结果要比比较html容易得多。

这是有效的标记。。但这不是一个有效的测试。导致方法生成不同标记的原因。。你也需要对这种情况进行测试。这里的“相等”是什么意思?显然,这两个字符串是不同的。在语义上,它们在呈现为HTML时没有区别。有效的测试不会查看原始字符串或呈现的输出-它将检查具有两个属性的
div
元素,一个名为
id
,值为
myId
,一个名为
class
,值为
myClass
,如果
div
元素包含一个值
Hello
。我不同意Simon的说法,我觉得测试是有效的,因为输出是有效的,所以要求开发人员测试标记的每个可能版本是不合适的。普雷斯顿,我很高兴你明白我的意思,我同意你的看法,询问HTML是一种方式。谢谢gluix,这就是我想要的答案。有了这个NuGet,我就可以像普雷斯顿在问题的评论中所建议的那样询问HTML了。