Итак, у вас есть HTTP-клиент, высокоуровневый метод, который дает вам некоторые структурированные данные, и низкоуровневый метод, который возвращает вам содержимое ответа.
Эти вещи скорее искусство, чем жесткие правила, но в большинстве случаев я предпочитаю писать код, который может иметь весь его ввод / вывод, а затем имитировать или тестировать реализацию самого ввода / вывода. Таким образом, большая часть бизнес-логики c будет тестируемой.
Ввод / вывод может быть многим - файл, сеть, ввод пользователя, но даже такие вещи, как получение сертификата из хранилища сертификатов или чтение настройка реестра. Любые данные, которые происходят во время выполнения извне процесса, являются вводом-выводом, независимо от метода.
Когда вы имитируете функциональность, наиболее распространенные вещи, которые вас интересуют, это проверка ввода метода или эмуляция его вывода ( или оба). Таким образом, в вашем макете вы не должны быть слишком обеспокоены фактической реализацией, так как вы не тестируете свой макетированный метод - вы тестируете все, что его вызывает.
Итак ... о вашем примере кода. Если вы пытаетесь протестировать MethodB, вам потребуется метод C, чтобы иметь тестовую реализацию - либо путем насмешки над HttpClient, на который он опирается, либо путем установки virtual
и переопределения в тесте.
Примечание: повторно используйте HttpClient, сохраните его с классом