Дополнительные методы скрывают зависимости?

Весь запрос и ответ шифруются, включая URL.

Примечание, что, когда Вы используете Прокси HTTP, оно знает адрес (домен) целевого сервера, но не знает запрашиваемого тракта на этом сервере (т.е. запрос и ответ всегда шифруются).

16
задан Phil Sandler 18 August 2009 в 22:36
поделиться

3 ответа

Я понимаю, откуда вы пришли, однако, если вы пытаетесь имитировать функциональность метода расширения, я считаю, что вы используете их неправильно. Методы расширения следует использовать для выполнения задачи, без которой было бы просто синтаксически неудобно. Ваш TruncateToLength - хороший пример.

Тестирование TruncateToLength не потребовало бы его имитации, оно просто потребовало бы создания нескольких строк и проверки того, действительно ли метод вернул правильное значение.

С другой стороны, если вы есть код на вашем уровне данных, содержащийся в методах расширения, которые обращаются к вашему хранилищу данных, тогда да, у вас есть проблема, и тестирование станет проблемой.

Я обычно использую методы расширения только для того, чтобы обеспечить синтаксический сахар для небольших , простые операции.

17
ответ дан 30 November 2019 в 16:50
поделиться

Больно, потому что их сложно высмеять. Я обычно использую одну из этих стратегий

  1. Да, убрать расширение, это PITA, чтобы имитировать
  2. Используйте расширение и просто проверьте, что оно работает правильно. т.е. передать данные в усечение и проверить, что они усечены
  3. Если это не какая-то тривиальная вещь, и я ДОЛЖЕН насмехаться над ней, я сделаю мой класс расширения установщиком для службы, которую он использует, и установлю это в тесте код.

т.е.

static class TruncateExtensions{

    public ITruncateService Service {private get;set;}
    public string TruncateToSize(string s, int size)
    {
         return (Service ?? Service = new MyDefaultTranslationServiceImpl()). TruncateToSize(s, size);
    }
}

Это немного пугает, потому что кто-то может установить службу, когда не следует, но иногда я немного дерзок, и если бы это было действительно важно, я мог бы сделать что-нибудь умное с флагами #if TEST или шаблон ServiceLocator, чтобы избежать использования установщика в производственной среде.

0
ответ дан 30 November 2019 в 16:50
поделиться

Я думаю, что это нормально - потому что это не похоже на TruncateToSize , реально заменяемый компонент. Это метод, который когда-либо должен будет делать только одну вещь.

Вы не делаете ' Не нужно иметь возможность имитировать все - только службы, которые либо нарушают модульное тестирование (доступ к файлам и т. д.), либо те, которые вы хотите протестировать с точки зрения подлинных зависимостей. Если бы вы использовали его для аутентификации или чего-то в этом роде, это было бы совсем другое дело ... но вы просто выполняете прямую строковую операцию, которая не имеет абсолютно никаких настроек, различных вариантов реализации и т.д. - нет смысла рассматривать это как зависимость в нормальном смысле.

Другими словами: если бы TruncateToSize был подлинным членом String , вы бы даже дважды подумали, прежде чем использовать его? Вы также пытаетесь имитировать целочисленную арифметику, вводя IInt32Adder и т. Д.? Конечно нет. Это то же самое, только вы предоставляете реализацию.

18
ответ дан 30 November 2019 в 16:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: