Монитор кампании имеет отличную матрицу поддержки , в которой подробно описано, что поддерживается, а что нет среди разных почтовых клиентов.
Вы можете использовать службу, например Litmus , чтобы просмотреть, как появляется электронное письмо по нескольким клиентам и попадают ли они в фильтры и т. д.
Можно получить некоторую информацию:
Фальшивка объекты на самом деле имеют рабочие реализации, но обычно берут некоторый ярлык, который делает их не подходящими для производства
, Тупики предоставляют консервированные ответы на вызовы, выполненные во время теста, обычно не отвечающего вообще ни на что снаружи, что программируется в для теста. Тупики могут также записать информацию о вызовах, таких как почтовый тупик шлюза, который помнит сообщения, которые она 'отправила', или возможно только, сколько сообщений она 'отправила'.
Насмешки - то, о чем мы говорим здесь: объекты, предварительно запрограммированные с ожиданиями, которые формируют спецификацию вызовов, которые они, как ожидают, получат.
Фальшивка : Мы получаем или создаем очень легкую реализацию той же функциональности в соответствии с компонентом, от которого зависит SUT, и дайте SUT команду использовать его вместо реального.
Тупик : Эта реализация настроена для ответа на вызовы от SUT со значениями (или исключения), который осуществит Непротестированный Код (см. Производственные Ошибки на странице X) в SUT. Ключевой признак для использования Тестового Тупика имеет Непротестированный Код, вызванный неспособностью управлять косвенными исходными данными фиктивного объекта SUT
, который реализует тот же интерфейс как объект, от которого зависит SUT (Система Под Тестом). Мы можем использовать Фиктивный объект в качестве наблюдательного поста, когда мы должны сделать Проверку Поведения, чтобы не иметь Непротестированное Требование (см. Производственные Ошибки на странице X), вызванный неспособностью наблюдать побочные эффекты вызова методов на SUT.
я пытаюсь упростить при помощи: Насмешка и Тупик. Я использую Насмешку, когда это - объект, который возвращает значение, которое установлено к протестированному классу. Я использую Тупик для имитации Интерфейсного или Абстрактного класса, который будет протестирован. На самом деле действительно не имеет значения, что Вы называете им, они - все классы, которые не используются в производстве и используются в качестве служебных классов для тестирования.
Тупик, Фальшивки и Насмешки имеют различные значения через другие источники. Я предлагаю, чтобы Вы представили свою команду внутренние термины и согласовали их значение.
я думаю, что важно различать два подхода: - проверка поведения (подразумевает замену поведения) - проверка конечного состояния (подразумевает эмуляцию поведения)
Рассматривают электронную почту, отправляющую в случае ошибки. При выполнении проверки поведения - Вы проверяете, что метод Send
из IEmailSender
выполнялся однажды. И необходимо эмулировать результат возврата этого метода, возвратить идентификатор отправленного сообщения. Таким образом, Вы говорите: "Я ожидаю, что Send
будет назван. И я просто возвращу макет (или случайный) идентификатор для любого вызова" . Это - проверка поведения: emailSender.Expect(es=>es.Send(anyThing)).Return((subject,body) => "dummyId")
При выполнении проверки состояния необходимо будет создать TestEmailSender
, который реализует IEmailSender
. И реализация Send
метод - путем сохранения входа к некоторой структуре данных, которая будет использоваться для проверки будущего состояние как массив некоторых объектов SentEmails
и затем это тестирует Вас, проверит, что SentEmails
содержит ожидаемую электронную почту. Это - проверка состояния: Assert.AreEqual(1, emailSender.SentEmails.Count)
От моих чтений я понял что проверка Поведения обычно называемый Насмешки . И проверка состояния обычно называемый Тупики или Фальшивки .
Дело в том, чтобы тесты были выразительными. Я устанавливаю ожидания на Mock, если хочу, чтобы тест описывал отношения между двумя объектами. Я убираю возвращаемые значения, если настраиваю вспомогательный объект, чтобы добиться интересного поведения в тесте.
string.IsNullOrEmpty(YourString)
– sylverfyre 25 April 2013 в 16:07