Pergunta

É possível para SelectNodes() ligou para um XmlDocument retornar nulo?

Minha situação é que estou tentando alcançar 100% de cobertura do código de teste de unidade;O ReSharper me diz que preciso me proteger contra um retorno nulo do SelectNodes() método, mas não vejo nenhuma maneira de um XmlDocument retornar nulo (e, portanto, nenhuma maneira de testar minha cláusula de guarda e atingir 100% de cobertura de teste de unidade!)

Foi útil?

Solução

É necessário atingir 100% de cobertura de código?Na verdade, é mesmo possível em condições normais (ou seja,circunstâncias controláveis, testáveis)?

Muitas vezes descobrimos que o uso de construções de "açúcar sintático" como o using {} bloco, existem caminhos de código "ocultos" criados (provavelmente finally {} ou catch {} blocos) que não podem ser exercidos a menos que alguma condição ambiental (como um soquete quebrado ou um disco quebrado) atrapalhe.

Outras dicas

Observando o Reflector, o método SelectNodes() na classe base do XmlDocument, XmlNode, pode retornar nulo se sua tentativa de criar um navegador retornar nulo.CreateNavigator() é bastante complexo e retornará nulo em algumas circunstâncias.Essas circunstâncias parecem estar relacionadas a um documento XML malformado - então esse é o seu caso de teste para falha de SelectNodes().

Se você estiver chamando SelectNodes no próprio XmlDocument e ele realmente for um XmlDocument e não uma classe derivada, SelectNodes não retornará nulo.

Se você criar uma classe descendente e substituir o método CreateNavigator(XmlNode), SelectNodes poderá retornar nulo.

Da mesma forma, se você chamar SelectNodes em um nó EntityReference, DocumentType ou XmlDeclaration, você também obterá null

Resumindo, para obter 100% de cobertura em um XmlDocument ou XmlNode que você não acabou de criar, é necessário testar se há nulo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top