SelectNodes()
上调用的XmlDocument
是否可以返回null?
我的困境是我试图达到100%的单元测试代码覆盖率; ReSharper告诉我,我需要防止来自SelectNodes()
方法的null返回,但我看不出XmlDocument可以返回null(因此,无法测试我的保护条款并达到100%单元测试覆盖!)
答案 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 {}
块)除非某些环境条件(如破损的插座或损坏的磁盘)妨碍使用。