2008-09-11 12 views
7

¿Es posible que SelectNodes() solicite a un XmlDocument que devuelva nulo?¿Es posible que SelectNodes en un XmlDocument devuelva nulo?

Mi problema es que estoy tratando de alcanzar la cobertura del código de prueba del 100% de la unidad; ReSharper me dice que tengo que protegerme contra un retorno nulo del método SelectNodes(), pero no veo la forma de que un XmlDocument devuelva nulo (y por lo tanto, ¡no hay manera de probar mi cláusula de guardia y alcanzar una cobertura de prueba 100%!)

Respuesta

2

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

a menudo encontramos que el uso de construcciones "azúcar sintáctica", como el bloque de using {}, hay rutas de código "ocultos" creadas (lo más probable finally {} o catch {} bloques) que no puede ser ejercido a menos que alguna condición ambiental (como un enchufe roto o disco roto) se interpone en el camino.

10

Al observar 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 devolverá nulo en algunas circunstancias. Esas circunstancias parecen estar alrededor de un documento XML con formato incorrecto, por lo que está su caso de prueba por falla de SelectNodes().

+0

¿No se puede analizar por completo un documento con formato incorrecto? Lo que vi dentro de CreateNavigator parecía tratar solo con marcado válido – rpetrich

+2

Creo que CreateNavigator() devuelve 'null' pero solo para ciertos tipos de XmlNode (sin incluir XmlDocument). Así que, por lo que puedo ver, si ha cargado un XmlDocument y no arrojó al analizar, CreateNavigator() nunca devolverá 'null' y, por lo tanto, SelectNodes() nunca devolverá' null' –

3

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

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

Del mismo modo, si usted llama SelectNodes en una EntityReference, DocumentType o nodo XmlDeclaration, obtendrá nula, así

En resumen, para la cobertura del 100% en un XmlDocument o XmlNode que no acabas crea, tiene que probar nulo.

+2

Ese es el problema: I * did * simplemente lo creó, por lo tanto, sé en mi corazón que SelectNodes() nunca puede devolver null. Aunque técnicamente podría *, por ejemplo, si una refactorización posterior hace que el documento se pase de forma externa. El único problema es que ahora no tengo forma de probar el caso == nulo en una prueba unitaria. –

Cuestiones relacionadas