XmlDocument 上的 SelectNodes 是否可以返回 null?
-
09-06-2019 - |
题
是否有可能 SelectNodes()
呼吁 XmlDocument
返回空值?
我的困境是我试图达到 100% 的单元测试代码覆盖率;ReSharper 告诉我,我需要防止从 SelectNodes()
方法,但我看不出 XmlDocument 可以返回 null(因此,无法测试我的保护子句并达到 100% 的单元测试覆盖率!)
解决方案
代码覆盖率有必要达到100%吗?事实上,在正常情况下(即,可控、可测试)情况?
我们经常发现使用像这样的“语法糖”结构 using {}
块,创建了“隐藏”代码路径(很可能 finally {}
或者 catch {}
块),除非某些环境条件(如损坏的套接字或损坏的磁盘)妨碍,否则无法执行。
其他提示
查看 Reflector,如果 XmlDocument 的基类 XmlNode 上的 SelectNodes() 方法尝试创建导航器返回 null,则该方法可能返回 null。CreateNavigator() 相当复杂,在某些情况下确实会返回 null。这些情况似乎与格式错误的 XML 文档有关 - 因此,这是 SelectNodes() 失败的测试用例。
如果您在 XmlDocument 本身上调用 SelectNodes,并且它确实是 XmlDocument 而不是派生类,则 SelectNodes 将不会返回 null。
如果创建后代类并重写 CreateNavigator(XmlNode) 方法,则 SelectNodes 可能返回 null。
同样,如果您在 EntityReference、DocumentType 或 XmlDeclaration 节点上调用 SelectNodes,您也会得到 null
简而言之,为了 100% 覆盖您不仅仅创建的 XmlDocument 或 XmlNode,您还必须测试 null。