XmlDocument の SelectNodes が null を返すことは可能ですか?
-
09-06-2019 - |
質問
可能ですか? SelectNodes()
に呼ばれた XmlDocument
nullを返すには?
私の苦境は、単体テストのコード カバレッジを 100% に達成しようとしていることです。ReSharper は、 SelectNodes()
メソッドを使用しましたが、XmlDocument が null を返す方法がわかりません (したがって、ガード句をテストして単体テスト カバレッジ 100% を達成する方法がありません!)
解決
コード カバレッジ 100% に達する必要はありますか?実際、それは通常の状態でも可能でしょうか(つまり、制御可能、テスト可能)の状況ですか?
多くの場合、次のような「糖衣構文」構造を使用すると、 using {}
ブロックの場合、「隠された」コード パスが作成されます (おそらく、 finally {}
または catch {}
何らかの環境条件 (ソケットの破損やディスクの破損など) が妨げられない限り、この機能を実行することはできません。
他のヒント
Reflector を見ると、XmlDocument の基本クラス XmlNode の SelectNodes() メソッドは、ナビゲーターを作成しようとして null を返した場合に null を返す可能性があります。CreateNavigator() は非常に複雑で、いくつかの状況では実際に null を返します。これらの状況は、不正な形式の XML ドキュメントに関連しているようです。つまり、SelectNodes() の失敗のテスト ケースがあります。
XmlDocument 自体で SelectNodes を呼び出しており、それが実際には XmlDocument であり派生クラスではない場合、SelectNodes は null を返しません。
子孫クラスを作成し、CreateNavigator(XmlNode) メソッドをオーバーライドすると、SelectNodes が null を返す可能性があります。
同様に、EntityReference、DocumentType、または XmlDeclaration ノードで SelectNodes を呼び出すと、同様に null が返されます。
つまり、作成したばかりではない XmlDocument または XmlNode を 100% カバレッジするには、null をテストする必要があります。