質問

可能ですか? 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 をテストする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top