При имитации службы, внедренной в контроллер, метод службы должен возвращать смоделированный объект, что-то вроде этого:
public class EmptyInterventionServiceMock implements InterventionService {
@Override
public Intervention findByInvoiceNumber(String invoiceNumber, String language) {
return mockedIntervention(invoiceNumber, language);
}
protected Intervention mockedIntervention(String invoiceNumber, String language) {
return mock(Intervention.class);
}
}
Можно ли смоделировать некоторые значения, которые будут возвращены вышеуказанным смоделированным объектом (Intervention
) чтобы проверить фи, они должны присутствовать в сгенерированном шаблоне JSON?
Например, в зависимости от того, имеет ли Intervention
spare parts
, services
, states
(все они простонаборы других объектов) и т. д. Если это так, JSON должен содержать соответствующие ключи: services: [{....}]
, states: [{}]
и т. д.
Было бы неплохо получить макет объекта в тесте и заглушить его возвращение.ценности.Единственный способ добиться этого на данный момент - создать отдельный класс обслуживания Mock
и внедрить его в тестовый класс следующим образом:
public class InterventionsControllerSpec extends ControllerSpec {
@Before
public void before() {
Injector injector = injector().bind(InterventionService.class).to(BaseInterventionServiceMock.class).create();
}
Где BaseInterventionServiceMock
просто расширяет EmptyInterventionServiceMock
иЗаглушки Некоторые методы возвращают значения, переопределяя его mockedIntervention
метод:
public class BaseInterventionServiceMock extends EmptyInterventionServiceMock {
@Override
protected Intervention mockedIntervention(String invoiceNumber, String language) {
Intervention intervention = mock(Intervention.class);
when(intervention.getString("ITV_DOCUMENT_NUMBER")).thenReturn("123");
when(intervention.getString("ITV_INVOICE")).thenReturn(invoiceNumber);
...
etc.
Поскольку это далеко от идеала, мне интересно, есть ли способ СУШКИ сделать это?
Спасибо.