На самом деле ли мы нуждаются в структуре изоляции для создания заглушек?

StackOverflow https://stackoverflow.com/questions/2889570

Вопрос

Я прочитал это: http://martinfowler.com/articles/mocksarentstubs.html.Мои концепции о заглушке и издевательства ясны. Я понимаю потребность в структуре изоляции, таких как MOQ, Rhinomocks и, как и создать макет объекта. Как издевательства, участвуют в фактической версии ожиданий. Но зачем нам нужны эти рамки для создания заглушек. Я предпочел бы высказать руку созданную заглушку и использовать его в различных приспособлениях.

Это было полезно?

Решение

Вы пытались использовать библиотеку, такие как носиновые издевательства в течение дня или два, прежде чем решить, что вручает ручные заглушки - лучший вариант?

@Chibacity: вся идея о насмелающихся библиотекам избегать Реализации. Если мне нужно только установить значение одного свойства, я не хочу создавать целую реализацию интерфейса. Вызывающий код вроде

MyObj obj = MockRepository.GenerateStub<MyObj>();
obj.MyProperty = 33;

кажется намного проще для меня. Не говоря уже о ситуациях, когда мне нужен только тупой заглушка, которую нужно пройти как параметр, где мне все равно, что происходит с ним (так что нет настроек).

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

Моя рекомендация состоит в том, чтобы узнать, как использовать хорошую издевательскую библиотеку (например, Rhino) со всеми его маленькими трюками, моя ставка в том, что вы скоро научитесь ценить причины его существования.

Другие советы

Строго говоря, нет, вы не нужно Рамки изоляции для создания заглушек. На самом деле, Microsoft даже имеет Stubs framework это Только генерирует заглушки, а не издеваться.

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

Что касается вашего последнего предложения («Я бы предпочел, чтобы вывести руку созданную заглушку и использовать его в различных приспособлениях»), вы фактически попробовали это на любом значительном проекте? Конечно, может быть, у вас есть интерфейс с одним методом, который возвращает Nullable Bool - вам нужно только написать три заглушки для этого интерфейса, и это не так плохо.

Но как только вы начнете смотреть на десятки Интерфейсов и классов в заглушку, он просто становится беспокойством, чтобы отслеживать все различные заглушки. Если вы используете каждый заглушку в нескольких тестах, вы, безусловно, вы можете оправдать закупку вручную и откладывать его в сторону; Но когда вы используете только одну конкретную заглушку только один или два раза, гораздо легче сохранить его как «анонимный» stub, непосредственно генерируемый рамками, для простоты.

После некоторого времени используя рамки издевательства, я обнаружил, что мой код кода занимает совершенно другой наклон. Этот наклон, кажется, направлен больше в стиле взаимодействия. Другими словами, я становлюсь более интересующимся сообщениями и поведением, чем государство. Мои объекты становятся сервисами, а не предметами зачистки, как это произойдет при использовании заглушек. С заглушками я в конечном итоге проходил состояние вокруг к другим объектам.

Проблема для меня тогда становится больше создания слоев абстракции. Я должен сомневаться, куда-то следует взаимодействовать на определенных уровнях. Это помогает с созданием этого «последнего ответственного момента». Поэтому я в конечном итоге с объектами, которые имеют производителей и потребителей. И все, что между ними - просто каналы сообщения.

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top