Я изучаю сертификацию Spring Core, и у меня есть некоторые сомнения относительно использования макета в тесте JUnit.Как точно работает этот тест весеннего блока, который использует макет?
Я знаю, что, в отличие от пней, где я должен реализовать интерфейс для создания поддельного объекта (мой стаб), используя макет Я использую насмешливые рамки (как EasyMock), которые создают для меня макет объекта используется в моих тестах.
Так шаги для тестирования с помощью издеваться являются следующими:
Использования насмешливых библиотек для создания фиктивного объекта, который реализует зависимый интерфейс на лету
Запись макет с ожиданием того, как он будет использоваться для сценария: какие методы будут называться и Какие значения должны быть возвращены
Упражнение сценарий
Проверка имитировали ожидания были выполнены
Так, например, я могу иметь следующий тестовый класс:
import static org.easymock.classextensions.EasyMock.*;
public class AuthenticatorImplTests {
// 1) Implementation of AccountRepository interface is created:
private AccountRepository accountRepository = createMock(AccountRepository.class);
private AuthenticatorImpl authenticator = new AuthenticatorImpl(accountRepository);
@Test
public void validUserWithCorrectPassword() {
// 2) RECORDING: What behavior to expect?
expect(accountRepository.getAccount(“lisa”)).andReturn(new Account(“lisa”, “secret”));
// Recording Playback (???)
replay(accountRepository);
// 3) Excercise the scenario:
boolean res = authenticator.authenticate(“lisa”, “secret”);
assertTrue(res);
// 4) Verify mock expectations were met
verify(accountRepository);
}
}
Хорошо, есть что-то, что очень ясно для меня, но есть некоторые другие вещи, которые я не могу понять.
Что происходит?
Мне кажется, что:
Он создан во время выполнения макета реализации зависимости, представленной интерфейса AccountRepository, необходимого для тестирования AuthenticatorImpl класса в качестве единицы.
Мой издеваться записываются с ожиданиями того, как он будет использоваться для определенного сценария, в предыдущем примере ожидание являются: 1) МЕТОД НАЗЫВАЕТСЯ: getAccount («Лиза») и возвращаемых значений вызываемого абонента МЕТОД: новый объект Account создал прохождение «Лиза» и «секретно» в качестве параметров конструктора
Итак, до тех пор пока теперь мне кажется, что это уже динамически создали специальный фиктивный объект и счета объекта (с установленными значениями), которые я ожидаю получить при вызове getAccount ("Lisa") способ на этом объекте. Это правильно?
Теперь у меня есть первое сомнение: что именно делает следующая строка?
replay(accountRepository);
Это вызов только для того, чтобы сделать объект Mock доступным?
Затем я выполнить испытание на части подлинности() способа класса AuthenticatorImpl. Если assertTrue (res); верните мне «зеленую планку», тест пройден.
Убедитесь, фиктивные ожидания были встречены линии:
проверить (accountRepository);
ОК ... но что именно эта линия делает? Потому что я думаю, что то, что говорят, если единичный тест передан («зеленый бар») или не прошел («красная полоса»), является результатом предыдущего утверждения, почему конец теста вызывает это verify() метод и передача его насмешливый объект? что делает этот метод?
Tnx