8

是否有可能SelectNodes()被调用XmlDocument返回null?

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

4

3 回答 3

10

查看反射器,如果尝试创建导航器返回 null,则 XmlDocument 的基类 XmlNode 上的 SelectNodes() 方法可以返回 null。CreateNavigator() 非常复杂,在某些情况下确实会返回 null。这些情况似乎与格式错误的 XML 文档有关——因此您的测试案例是 SelectNodes() 失败。

于 2008-09-11T20:27:25.587 回答
4

如果您在 XmlDocument 本身上调用 SelectNodes 并且它确实是 XmlDocument 而不是派生类,则 SelectNodes 将不会返回 null。

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

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

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

于 2008-09-11T20:35:29.797 回答
2

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

我们经常发现,使用像using {}块这样的“语法糖”结构,创建的“隐藏”代码路径(很可能是finally {}catch {})无法执行,除非某些环境条件(如损坏的套接字或损坏的磁盘)进入方式。

于 2008-09-11T20:27:05.993 回答