Pregunta

¿Es posible para SelectNodes() llamó a un XmlDocument devolver nulo?

Mi situación es que estoy tratando de alcanzar el 100% de cobertura del código de prueba unitaria;ReSharper me dice que necesito protegerme contra un retorno nulo del SelectNodes() método, pero no veo manera de que un XmlDocument pueda devolver nulo (y por lo tanto, no hay manera de probar mi cláusula de protección y alcanzar el 100% de cobertura de prueba unitaria).

¿Fue útil?

Solución

¿Es necesario alcanzar el 100% de cobertura de código?De hecho, ¿es posible siquiera en condiciones normales (es decir,circunstancias controlables, comprobables)?

A menudo encontramos que el uso de construcciones "azúcar sintácticas" como la using {} bloque, se crean rutas de código "ocultas" (muy probablemente finally {} o catch {} bloques) que no se pueden ejercitar a menos que alguna condición ambiental (como un enchufe roto o un disco roto) se interponga en el camino.

Otros consejos

Mirando Reflector, el método SelectNodes() en la clase base de XmlDocument, XmlNode, puede devolver nulo si su intento de crear un navegador devuelve nulo.CreateNavigator() es bastante complejo y, de hecho, devolverá un valor nulo en algunas circunstancias.Esas circunstancias parecen estar relacionadas con un documento XML con formato incorrecto, por lo que ahí está el caso de prueba de falla de SelectNodes().

Si llama a SelectNodes en el propio XmlDocument y realmente es un XmlDocument y no una clase derivada, SelectNodes no devolverá nulo.

Si crea una clase descendiente y anula el método CreateNavigator(XmlNode), SelectNodes podría devolver nulo.

De manera similar, si llama a SelectNodes en un nodo EntityReference, DocumentType o XmlDeclaration, también obtendrá un valor nulo.

En resumen, para obtener una cobertura del 100% en un XmlDocument o XmlNode que no acaba de crear, debe realizar una prueba nula.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top