#java #spring #unit-testing #mockito
#java #spring #модульное тестирование #mockito
Вопрос:
В моем тесте, когда я утверждаю сообщение об исключении, я получаю null
Я не получаю макет сообщения внутри службы …. 🙁
У меня есть:
Мой тест:
@RunWith(MockitoJUnitRunner.class)
public class ServiceImplTest {
@InjectMocks
private ServiceImpl service;
@Mock
private Message message;
public static final String REQUIRED_FIELD = "required.field";
@Before
public void setUp() {
when(message.getMessage(eq(REQUIRED_FIELD), any(List.class))).thenReturn(REQUIRED_FIELD);
System.out.println(message.getMessage(REQUIRED_FIELD, new ArrayList()));
}
@Test(expected = MyException.class)
public void testCancel_shouldValidCancellation_and_ThrowTicketException_with_RequiredFieldMessage() {
try {
Object object = //... new object
service.do(object);
} catch (Exception e) {
assertEquals(REQUIRED_FIELD, e.getMessage()); // <-- e.getMessage return null!!!
}
}
}
Мой сервис:
@Service
public class ServiceImpl implements Service {
@Autowired
Message message;
@Override
public Object do(Object object) {
if(object.getSomeAttribute() == null)) {
throw new MyException(message.getMessage("required.field", "attribute"));
}
//doSomething...
return something;
}
}
В setUp()
of test printLn()
печатает required.field
, но я не могу использовать message
of Service
!!
Кто-нибудь может мне помочь?
Комментарии:
1.
private serviceImpl service;
это опечатка или другой класс?2. Извините, просто неправильно написал.. отредактировано 🙂
Ответ №1:
Трудно сказать наверняка, не зная интерфейса Message
, но легко заметить, что вы настраиваете макет объекта на метод заглушки с подписью getMessage(String, List)
:
when(message.getMessage(eq(REQUIRED_FIELD), any(List.class))).thenReturn(REQUIRED_FIELD);
Однако ServiceImpl
использует getMessage(String, String)
. Значение по умолчанию, которое возвращается mock в этом случае, является null
. Вы должны правильно настроить макет объекта.