.net XmlDocument上的SelectNodes是否可能返回null?

.net XmlDocument上的SelectNodes是否可能返回null?,.net,xml,unit-testing,resharper,.net,Xml,Unit Testing,Resharper,对XmlDocument调用的SelectNodes()是否可能返回null 我的困境是,我试图达到100%的单元测试代码覆盖率;ReSharper告诉我需要防止从SelectNodes()方法返回null,但是我看不到XmlDocument可以返回null的方法(因此,无法测试我的guard子句并达到100%的单元测试覆盖率!)是否需要达到100%的代码覆盖率?事实上,在正常(即可控、可测试)情况下,这是否可能 我们经常发现,使用像使用{}块这样的“语法糖”结构,会创建一些“隐藏”的代码路径(

XmlDocument
调用的
SelectNodes()
是否可能返回null


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

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


我们经常发现,使用像
使用{}
块这样的“语法糖”结构,会创建一些“隐藏”的代码路径(很可能是
最终{}
捕获{}
块),除非某些环境条件(如断开的套接字或断开的磁盘)阻碍,否则无法执行这些代码路径,XmlDocument基类XmlNode上的SelectNodes()方法如果试图创建导航器返回null,则可以返回null。CreateNavigator()相当复杂,在某些情况下确实会返回null。这些情况似乎与格式不正确的XML文档有关-因此,这是SelectNodes()失败的测试案例。

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

如果创建子类并重写CreateNavigator(XmlNode)方法,则SelectNodes可能返回null

类似地,如果在EntityReference、DocumentType或XmlDeclaration节点上调用SelectNodes,也会得到null


简言之,要在您刚刚创建的XmlDocument或XmlNode上实现100%的覆盖率,您必须测试null。

格式错误的文档不会完全解析吗?我在CreateNavigator中看到的似乎只处理有效的标记,我认为CreateNavigator()返回
null
,但只针对某些类型的XmlNode(不包括XmlDocument)。据我所知,如果您加载了一个XmlDocument,而它在解析时没有抛出,那么CreateNavigator()将永远不会返回
null
,因此SelectNodes()将永远不会返回
null
,这就是问题所在:我只是创建了它,因此我心里知道SelectNodes()永远不会返回null。虽然从技术上讲,如果稍后的重构导致文档从外部传入,它可能会发生。唯一的问题是,现在我没有办法在单元测试中测试==null的情况。我知道我迟到了10年,但有解决方案吗?