Возможно ли, чтобы SelectNodes на XmlDocument возвращал нуль? - PullRequest
8 голосов
/ 12 сентября 2008

Возможно ли для SelectNodes(), вызванного на XmlDocument, вернуть ноль?

Мое затруднение заключается в том, что я пытаюсь достичь 100% покрытия кода модульного теста; ReSharper говорит мне, что мне нужно защититься от нулевого возврата из метода SelectNodes(), но я не вижу способа, чтобы XmlDocument мог вернуть нулевое значение (и, следовательно, нет способа проверить мое условие охраны и достичь 100% покрытия модульного теста! )

Ответы [ 3 ]

10 голосов
/ 12 сентября 2008

Глядя на Reflector, метод SelectNodes () в базовом классе XmlDocument, XmlNode, может возвращать ноль, если его попытка создать навигатор возвращает ноль. CreateNavigator () довольно сложен и действительно вернет ноль при некоторых обстоятельствах. Похоже, что эти обстоятельства связаны с искаженным XML-документом, поэтому есть ваш тестовый пример для сбоя SelectNodes ().

4 голосов
/ 12 сентября 2008

Если вы вызываете SelectNodes для самого XmlDocument, и это действительно XmlDocument, а не производный класс, то SelectNodes не вернет ноль.

Если вы создаете класс-потомок и переопределяете метод CreateNavigator (XmlNode), тогда SelectNodes может возвращать ноль.

Аналогично, если вы вызовете SelectNodes для узла EntityReference, DocumentType или XmlDeclaration, вы также получите нулевое значение

Короче говоря, для 100% покрытия XmlDocument или XmlNode, который вы только что не создали, вы должны проверить на нулевое значение.

2 голосов
/ 12 сентября 2008

Нужно ли достигать 100% покрытия кода? Действительно, возможно ли это даже при нормальных (то есть контролируемых, проверяемых) обстоятельствах?

Мы часто обнаруживаем, что при использовании «синтаксических сахарных» конструкций, таких как блок using {}, создаются «скрытые» пути кода (наиболее вероятно, блоки finally {} или catch {}), которые не могут быть выполнены без каких-либо условий среды (как сломанная розетка или сломанный диск) мешает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...