Windows Vistaマシンで「インターネットに接続されている」ネットワークアダプターのリストを取得するC#モジュールがあります。このモジュールは、「ネットワーク リスト マネージャー API」(または NLM API) を使用して、すべてのネットワーク接続を繰り返し処理し、IsConnectedToInternet 値が true であるすべての接続を返します。
このSOの質問で、このモジュールの実装に関する提案をいくつか受け取りました
このモジュールをテストするために、別のロジックに基づいてインターネットに接続されたインターフェイスのリストを返すヘルパーを作成することにしました。これは、元のモジュールのロジックの一種の「現実チェック」になります。テスト ヘルパーについては、実稼働コードの悪い習慣と見なされる可能性のある検出方法を喜んで使用することに注意してください (たとえば、「Google」などのインターネット リソースを利用できるようにする - シャットダウンしたり、内部ファイアウォールによってブロックされたりした場合など)。展開された製品ベースとは対照的に、テストを修正するのは比較的簡単です)。
私が選択した別の検出方法は、TcpClient を使用して「www.google.com:80」に接続することでした。私の問題: 複数のアダプター (ワイヤレスと LAN の両方など) が接続されている場合、そのうちの 1 つの検出方法が「既に接続されているソケットで接続要求が行われました」というエラーで失敗します。
私の質問は 3 つあります。
一般的に、そのようなモジュールをどのようにテストしますか? 同じことを別の方法で実行して結果を比較するという考えを支持しますか?それともやり過ぎで、システムの API に頼る必要がありますか? ここでの主な問題は、予想される結果が事前にわかるようにシステムを事前に構成するのが非常に難しいことです。
どのような代替ロジックを提案しますか? 前述の質問で示唆されたことの 1 つは、ルーティング テーブルを調べることでした。宛先が 0.0.0.0 のルーティング エントリを持つ各アダプタを「インターネットに接続されている」と見なすのはどうでしょうか。他の提案?
現在のテスト ロジックで "既に接続されています" というエラーが発生する理由がわかりましたか?