У меня есть модуль С#, отвечающий за получение списка сетевых адаптеров, которые «подключены к Интернету» на компьютере с Windows Vista. Модуль использует "API диспетчера сетевых списков. " (или NLM API) для перебора всех сетевых подключений и возврата всех тех, для которых значение IsConnectedToInternet равно true.
Я получил несколько предложений по реализации этого модуля в этом ТАК вопрос
Чтобы протестировать этот модуль, я решил написать помощник, который возвращает список интерфейсов, подключенных к Интернету, на основе другой логики, поэтому это будет своего рода «проверка реальности» для логики исходного модуля. Обратите внимание, что для помощника по тестированию я готов использовать методы обнаружения, которые могут считаться плохой практикой для производственного кода (например, полагаться на доступность какого-либо интернет-ресурса, такого как «Google», на случай, если он отключится, заблокируется нашим внутренним брандмауэром и т. д. относительно легко исправить тест, в отличие от развернутой базы продукта).
Альтернативный метод обнаружения, который я выбрал, заключался в попытке подключиться к «www.google.com:80» с помощью TcpClient. Моя проблема: когда у меня есть более одного подключенного адаптера (например, как беспроводного, так и LAN), метод обнаружения не работает для одного из них с ошибкой «Запрос на подключение был сделан на уже подключенном сокете».
Мой вопрос состоит из трех частей:
Как бы вы вообще протестировали такой модуль? Поддерживаете ли вы идею делать то же самое по-другому и сравнивать результаты или это перебор и я должен полагаться на системный API? Моя главная проблема здесь в том, что очень сложно предварительно настроить систему, чтобы я заранее знал, каковы ожидаемые результаты.
Какую альтернативную логику вы бы предложили? Одна вещь, которая была предложена в вышеупомянутом вопросе, заключалась в просмотре таблицы маршрутизации — как насчет того, чтобы рассматривать каждый адаптер, у которого есть запись маршрутизации с пунктом назначения 0.0.0.0, как «подключенный к Интернету»? Другие предложения?
Вы понимаете, почему я получаю ошибку «уже подключен» с текущей тестовой логикой?