XmlDocument上的SelectNodes是否可以返回null?

时间:2008-09-11 20:20:29

标签: .net xml unit-testing resharper

SelectNodes()上调用的XmlDocument是否可以返回null?

我的困境是我试图达到100%的单元测试代码覆盖率; ReSharper告诉我,我需要防止来自SelectNodes()方法的null返回,但我看不出XmlDocument可以返回null(因此,无法测试我的保护条款并达到100%单元测试覆盖!)

3 个答案:

答案 0 :(得分:10)

查看Reflector,XmlDocument的基类XmlNode上的SelectNodes()方法如果尝试创建导航器返回null,则返回null。 CreateNavigator()非常复杂,在某些情况下确实会返回null。这些情况似乎是一个格式错误的XML文档 - 所以你的测试用例是SelectNodes()的失败。

答案 1 :(得分:4)

如果你在XmlDocument本身上调用SelectNodes,它实际上是一个XmlDocument而不是一个派生类,而SelectNodes则不会返回null。

如果创建后代类并覆盖CreateNavigator(XmlNode)方法,则SelectNodes可能返回null。

同样,如果在EntityReference,DocumentType或XmlDeclaration节点上调用SelectNodes,您也​​将获得null

简而言之,对于您不仅仅创建的XmlDocument或XmlNode的100%覆盖率,您必须测试null。

答案 2 :(得分:2)

是否有必要达到100%的代码覆盖率?实际上,它是否可能在正常(即可控,可测试)的情况下进行?

我们经常发现使用像using {}块这样的“语法糖”结构,会创建“隐藏”代码路径(很可能是finally {}catch {}块)除非某些环境条件(如破损的插座或损坏的磁盘)妨碍使用。