是否有可能 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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top