ActiveWeb: насмешливый внедренный сервис - PullRequest
0 голосов
/ 27 сентября 2018

При имитации службы, внедренной в контроллер, метод службы должен возвращать смоделированный объект, что-то вроде этого:

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.

Поскольку это далеко от идеала, мне интересно, есть ли способ СУШКИ сделать это?

Спасибо.

1 Ответ

0 голосов
/ 27 сентября 2018

Вы ничего не пропустили.Ваши предположения верны.Создание фиктивного подкласса сервиса - это то, как мы проводим тестирование.Если вы хотите более элегантный способ, вы можете представить предложение для рассмотрения: https://github.com/javalite/activeweb/issues для рассмотрения.

...