java .lang.ClassCastException: org.mockito.codegen.Throwable $ MockitoMock $ 1720133689 не может быть преобразован в com..exception.myException - PullRequest
0 голосов
/ 05 августа 2020

Как написать Mockito для приведенного ниже тестового кода?

@Override
public void onSkipInRead(Throwable t) {
    MyException ex = (MyException) t;
    myService.updateErrLog("ANC", "ANZ", "READ", null, t.getMessage(),"N", 0, ex.getWriterName(), ex.getJobId());
}

Тестовый пример

@Test
public myService test_onSkipInRead() {
    myService.updateErrLog(any(), any(), any(), any(), any(), any(), any(), any(), any());
    mySkipListener.onSkipInRead(t);

    verify(myService, atLeast(1)).updateErrLog(any(), any(), any(), any(), any(), any(), any(), any(), any());
}

Ошибка

java .lang.ClassCastException : org.mockito.codegen.Throwable $ MockitoMock $ 1720133689 не может быть преобразован в com..exception.myException

1 Ответ

0 голосов
/ 08 августа 2020

Как инициализируется переменная "t" в вашем тестовом классе? Я предполагаю, что это тип «Throwable», и поэтому Mockito насмехается только над исключением Throwable, но ваш метод onSkipInRead преобразует его в MyException. Просто измените тип вашей переменной t на MyException, и я думаю, у вас все будет хорошо.

По другой теме: вы вызываете updateErrLog в своей службе в тестовом коде, чтобы Mockito зарегистрировал хотя бы один вызов к нему. Затем вы проверяете, что есть хотя бы один вызов этого метода. Даже если ваш метод onSkipInRead не вызывает метод updateErrLog, ваш тест все равно будет успешным, и я не думаю, что это то, что вам нужно. Также может быть полезно проверить, что метод updateErrLog вызывается с данными, которые хранятся в MyException, вместо использования any () для всех аргументов метода, но это, конечно, полностью зависит от ваших бизнес-процессов и потребностей.

...