Как Насмешки предназначены, чтобы использоваться?

используйте $ get и $ lt, чтобы найти данные даты в mongodb

var tomorrowDate = moment(new Date()).add(1, 'days').format("YYYY-MM-DD");
db.collection.find({"plannedDeliveryDate":{ $gte: new Date(tomorrowDate +"T00:00:00.000Z"),$lt: new Date(tomorrowDate + "T23:59:59.999Z")}})
23
задан Rontologist 17 October 2008 в 14:17
поделиться

9 ответов

Я рекомендую смотреть на Насмешки статьи Martin Fowler, Не Тупики для более авторитетной обработки Насмешек, чем я могу дать Вам.

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

Насмешки могут казаться утомительными сначала, но они делают Поблочное тестирование намного легче и более устойчивым, как только Вы приобретаете навык использования их. Большинство языков имеет библиотеки Mock, которые делают насмешку относительно тривиальной. Если Вы будете использовать Java, я рекомендую свой любимый: EasyMock.

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

19
ответ дан Justin Standard 29 November 2019 в 02:01
поделиться

Не спускайтесь по темному Ведущему устройству пути Luke.:) Не дразнят все. Вы могли, но Вы не были должны... здесь быть почему.

  • , Если Вы продолжаете тестировать каждый метод в изоляции, Вы имеете неожиданности и разрабатываете сокращение для Вас, когда Вы приносите им всем вместе крыло БОЛЬШОЙ ВЗРЫВ . Мы создаем объекты так, чтобы они могли сотрудничать для решения большей проблемы.. Собой они незначительны. Вы потребность знать, работают ли все сотрудники, как ожидается .
  • Насмешки делают тесты хрупкими путем представления дублирования - Да я знаю что аварийная сигнализация звуков. Поскольку каждая насмешка ожидает, что Вы устанавливаете, существуют места n, где Ваша сигнатура метода существует. Фактический код и Ваши ложные ожидания (в нескольких тестах). Изменение фактического кода легче... обновление всех ложных ожиданий утомительно.
  • Ваш тест теперь посвящен в информацию о реализации инсайдера . Таким образом, Ваш тест зависит от того, как Вы приняли решение реализовать решение... плохо. Тесты должны быть независимой спецификацией, которая может быть встречена несколькими решениями. У меня должна быть свобода просто нажать, удаляют на блоке кода и повторно реализуют без [1 114] необходимость переписать набор тестов.. потому что требования все еще остаются такими же.

В заключение, я скажу, "Если это шарлатаны как утка, обходы как утка, тогда это, вероятно, будет утка" - Если это чувствует себя неправильным.. это, вероятно. *Использование дразнит к краткому обзору трудных детей как операции IO, базы данных, сторонние компоненты и т.п.. Как соль, часть его необходима.. слишком много и: x *
Это - священная война состояния, базирующегося по сравнению с Iteraction, базирующимся, тестируя.. Гугление даст Вам более глубокое понимание.

Разъяснение: я поражаю некоторое сопротивление w.r.t. интеграционные тесты здесь:) Так для разъяснения моего стенда..

  • Насмешки не фигурируют в 'Приемной области тестов/Интеграции. Вы только найдете их в мире Поблочного тестирования.. и это - мой фокус здесь.
  • Приемочные испытания отличаются и очень необходимы - не приуменьшение их. Но Модульные тесты и Приемочные испытания отличаются и должны быть сохранены отличающимися.
  • Все сотрудники в компоненте или пакете не должны быть изолированы друг от друга.. Как микрооптимизация, которая является Излишеством. Они существуют для решения проблемы вместе .. сцепление.
15
ответ дан Gishu 29 November 2019 в 02:01
поделиться

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

2
ответ дан Sam Wessel 29 November 2019 в 02:01
поделиться

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

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

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

Большинство из них время у меня было использование для фиктивных объектов, когда код, для которого я пишу тесты, так сильно связывается (чтение: плохой дизайн), что я должен записать фиктивные объекты, когда классы они зависят от, не доступно. Уверенный существует допустимое использование для фиктивных объектов, но если бы Ваш код требует их использование, я бросил бы другой взгляд на дизайн.

1
ответ дан asksol 29 November 2019 в 02:01
поделиться

Да, это - оборотная сторона тестирования с насмешками. Существует большая работа, что необходимо вставить это, это чувствует себя жестоким. Но это - сущность поблочного тестирования. Как можно протестировать что-то в изоляции, если Вы не дразните внешние ресурсы?

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

, Если бы каждый разработчик в Вашем проекте потратил модульные тесты записи времени, то те 16 слоев (косвенности) не были бы так большой частью проблемы. Надо надеяться, у Вас должно быть то тестовое покрытие с начала, правильно?:)

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

1
ответ дан Spoike 29 November 2019 в 02:01
поделиться

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

, Когда кто-то пытается зарегистрироваться, , CheckInUi отправляет объект CheckInInfo к объект CheckInMediator, который проверяет его с помощью CheckInValidator, тогда если это в порядке, это заполняет объект области, названный Транзакция с [1 115] CheckInInfo с помощью [1 116], CheckInInfoAdapter тогда передает Транзакция к экземпляру [1 118] ITransactionDao. SaveTransaction () для персистентности.

я прямо сейчас пишу, что немного автоматизировали интеграционные тесты и очевидно CheckInUi и , ITransactionDao является окнами к внешним системам, и они - те, которых нужно дразнить. Однако, чей сказать, что в какой-то момент CheckInValidator не будет звонить веб-сервису? Именно поэтому, когда Вы пишете модульные тесты , Вы предполагаете, что все кроме определенной функциональности Вашего класса - внешняя система. Поэтому в моем модульном тесте [1 122] CheckInMediator я дразню все объекты, с которыми это говорит.

РЕДАКТИРОВАНИЕ: Gishu технически корректен, не все нужно дразнить, я, например, не дразню CheckInInfo, так как это - просто контейнер для данных. Однако что-либо, что Вы могли когда-либо рассматривать как внешний сервис (и это - почти что-либо, что преобразовывает данные или имеет побочные эффекты), нужно дразнить.

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

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

Действительно занимают время для изучения его правильно, день, который я понял, Насмешки был огромный момент a-ha. Объедините его с инверсией контейнера управления, и я никогда не возвращаюсь.

На ноте стороны, один из наших людей IT просто вошел и дал мне свободный ноутбук!

1
ответ дан George Mauer 29 November 2019 в 02:01
поделиться

Как кто-то сказал прежде, если Вы дразните все для изоляции более детализированный, чем класс, Вы тестируете, Вы бросаете осуществлять сцепление в Вас код, который находится под тестом.

Имеют в виду, что насмешка имеет фундаментальное преимущество, проверку поведения. Это - что-то, что не обеспечивают тупики, и другая причина, которая делает тест более хрупким (но может улучшить покрытие кода).

1
ответ дан Korbin 29 November 2019 в 02:01
поделиться

Насмешки были изобретены частично к , отвечают на вопрос : Как был бы Вы объекты модульного теста, если у них не было методов get или методов set?

В эти дни, рекомендовал , практика должна дразнить роли не объекты. Используйте Насмешки в качестве средства проектирования для разговора о сотрудничестве и разделении обязанностей, и не как "умные тупики".

1
ответ дан keithb 29 November 2019 в 02:01
поделиться

Макетные объекты 1) часто используются как средство изоляции тестируемого кода, НО 2) как уже отметил keithb, они важны для того, чтобы "сосредоточиться на отношениях между взаимодействующими объектами". Эта статья дает некоторое представление и историю, связанную с этой темой: Responsibility Driven Design with Mock Objects.

0
ответ дан 29 November 2019 в 02:01
поделиться
Другие вопросы по тегам:

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