Тестирование пустых методов, которые ничего не меняют в тестовом сценарии - PullRequest
1 голос
/ 28 мая 2019

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

Звучит сложнее, чем он есть - проверьте мой фрагмент для лучшего понимания:

class A {
    @Inject
    private Mailer mailer; // Custom mailer class

    public void doSomething() {
        Date date = new Date(); // dynamic parameter I do not care about in the test
        String parameter = "test"; // The parameter I want to test later

        mailer.sendMail(parameter, date);
    }
}

class ATest {
    @Mock
    @Produces
    private Mailer mailer;

    @Inject
    private A classToTest;

    @Test
    public void testDoSomething() throws Exception {

        classToTest.doSomething();

        assertThat(??).isEqualTo("test"); //How can I get the value of parameter?
    }
}

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

Нет смысла повышать parameter до глобальной переменной.

Есть лиспособ проверить значение parameter без изменения кода A?А если нет, то что будет лучшим решением, не испортив мой класс только для тестирования?

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

Вам нужно использовать Mockito.verify:

verify(mailer, times(1)).sendMail("test");

Проверка проверяет, что произошло с вашими макетами: сколько раз был вызван метод и какие аргументы были переданы этому методу.


Обновление: Если вы хотите исключить определенные параметры, вы можете использовать org.mockito.Matchers.any - проще иметь его как статический импорт. (Примечание: если вы игнорируете некоторые параметры, то те, которые вы хотите ВКЛЮЧИТЬ, теперь должны быть заключены в org.mockito.Matchers.eq).

verify(mailer, times(1)).sendMail(eq("test"), any(Date.class));
0 голосов
/ 28 мая 2019

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

@Test(expected = EmailSendException.class)
public void testDoSomething(){
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...