Возможно ли, чтобы SelectNodes в XmlDocument возвращал значение null?
-
09-06-2019 - |
Вопрос
Возможно ли это для SelectNodes()
призвал XmlDocument
вернуть ноль?
Мое затруднительное положение заключается в том, что я пытаюсь достичь 100% покрытия кода модульными тестами;ReSharper сообщает мне, что мне нужно защититься от нулевого возврата из SelectNodes()
метод, но я не вижу возможности, чтобы XmlDocument мог возвращать значение null (и, следовательно, нет способа проверить мое защитное предложение и достичь 100% покрытия модульным тестом!)
Решение
Нужно ли достигать 100% покрытия кода?Действительно, возможно ли это вообще при нормальном (т.контролируемые, проверяемые) обстоятельства?
Мы часто обнаруживаем, что использование конструкций «синтаксического сахара», таких как using {}
блоке создаются «скрытые» пути кода (скорее всего finally {}
или catch {}
блоки), которые нельзя использовать, если не мешает какое-либо состояние окружающей среды (например, сломанный сокет или сломанный диск).
Другие советы
Если посмотреть на Reflector, то метод SelectNodes() базового класса XmlDocument, XmlNode, может возвращать значение NULL, если его попытка создать навигатор возвращает значение NULL.CreateNavigator() довольно сложен и в некоторых случаях действительно возвращает значение null.Эти обстоятельства, по-видимому, связаны с некорректным XML-документом - так что это ваш тестовый пример сбоя SelectNodes().
Если вы вызываете SelectNodes для самого XmlDocument, и это действительно XmlDocument, а не производный класс, тогда SelectNodes не вернет значение null.
Если вы создадите класс-потомок и переопределите метод CreateNavigator(XmlNode), тогда SelectNodes может вернуть значение null.
Аналогично, если вы вызываете SelectNodes на узле EntityReference, DocumentType или XmlDeclaration, вы также получите значение null.
Короче говоря, для 100% покрытия XmlDocument или XmlNode, который вы не просто создали, вам необходимо проверить значение null.