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