Переключение с Jmockit на mockito - PullRequest
0 голосов
/ 19 февраля 2019

поэтому я решил перейти от jmockit к mockito, и мне кажется странным, что я не могу понять, как некоторые вещи работают в mockito

У меня есть такой простой метод @BeforeEach, и когда мои объекты высмеиваются, я всегдаполучить исключение нулевого указателя

@Mock
public EntityManager entityManager;

@Mock
public TimerSessionBean timerSessionBean;

@Mock
public Client client;

private CaseSetReminder caseSetReminder;

private Request request;
private Message message;

@BeforeEach
final void beforeEach() {
    request = new Request();
    message = new Message();

    String spaceId = "SPACE_ID";
    String threadId = "THREAD_ID";

    caseSetReminder = new CaseSetReminder();
    caseSetReminder.entityManager = entityManager;
    caseSetReminder.timerSessionBean = timerSessionBean;

    ThreadM thread = new ThreadM();

    thread.setName("spaces/" + spaceId + "/thread/" + threadId + "");
    Sender sender = new Sender();
    sender.setName("MyName");
    message.setSender(sender);
    message.setThread(thread);

    Reminder reminder = new Reminder("Do Something", ZonedDateTime.now(ZoneId.of("Europe/Athens")).plusMinutes(10),
            "DisplayName", "Europe/Athens", spaceId, threadId);

    reminder.setReminderId(1);
    timerSessionBean.nextReminderDate = reminder.getWhen();
}

, которое всегда выдает мне

Аргумент, переданный в verify (), имеет тип TimerSessionBean и не является ложным!

Makeубедитесь, что вы поставили круглые скобки правильно!

См. примеры правильных проверок:

verify(mock).someMethod();

verify(mock, times(10)).someMethod();

verify(mock, atLeastOnce()).someMethod();

, но это не так, его timerSessionBean проверяется и мой синтаксис правильный

и этот метод, который я запускаю, вызывает метод beforeEach

@Test
void mockitoTest() throws Exception {

    final String expectedDate = "12/12/2019 12:00 athens";
    message.setText("remind me ' set next reminder Test' at " + expectedDate);
    request.setMessage(message);

    // Already set in mock a nextReminder that is to be in 10 mins from now()
    //So this should not be set
    caseSetReminder.setRequest(request);
    caseSetReminder.setReminder();

    //Verifies that setNextReminder is called 0 times because Input reminderDate is AFTER the current
    verify(timerSessionBean , times(1)).setNextReminder(Mockito.any(Reminder.class), Mockito.any(ZonedDateTime.class));

}

Я надеюсь, что вы, ребята, можете помочь мне разобраться в этом

1 Ответ

0 голосов
/ 19 февраля 2019

Вы должны убедиться, что вы запускаете движок Mockito:

@BeforeEach
final void beforeEach() {
  MockitoAnnotations.initMocks(this);
  ..

или

 @RunWith(MockitoJUnitRunner.class) 
 public class TestClass{

также вы не можете устанавливать поля проверяемого класса, такие как:

timerSessionBean.nextReminderDate = reminder.getWhen();

попробуйте использовать doReturn(), when(), then() для настройки поведения

...