В вашем методе есть зависимость от EndpointAddress, DiscoveryEndpoint и DiscoveryClient.
Прежде всего, я бы поместил этот код во что-то, напоминающее фабрику. Я также поместил бы вышеупомянутые зависимости в фабрики в случае необходимости и затем ввел бы те фабрики в класс, используя
МОК.
Тогда это позволяет мне помещать поддельные объекты (или макеты) в систему для модульного тестирования, и мне не нужно полагаться на конкретного клиента обнаружения (например). Но если бы это не было проблемой, я бы по-прежнему фабриковал это.
Вы также пытаетесь найти конечную точку и создать для нее канал или создать исключение. Хорошо, если вы придерживаетесь вышеизложенного, вам нужно возвращать default (T).
Здесь нужно либо сохранить код, а затем выдать исключение, а не возвращать ноль, вернуть ноль и проверить его, заставить этот метод делать только одну вещь - попытаться создать канал на основе настроенного DiscoveryClient. .
Если бы я делал это, я бы удалил все эти зависимости, сделал бы его фабрикой (и другими, если необходимо, фабриками), затем передал бы настроенный DiscoveryClient и либо возвратил бы нуль, либо возвратил бы экземпляр NullChannel.
Затем я могу сделать утверждение для экземпляра, возвращенного в моем тесте, и метод создания несет только одну ответственность.
НТН