Как использовать мокито в ExchangeTestSupport

У меня есть верблюжий маршрут, как показано ниже

public class MainRouteBuilder extends RouteBuilder {

    @Autowired
    private CcsRouteCommonProperties commonProps;

    /**
     * {@inheritDoc}
     */
    @Override
    public void configure() throws Exception {

    }
}

Я написал тест с использованием ExchangeTestSupport, как показано ниже.

public class MainRouteBuilderTest extends ExchangeTestSupport {

    /**
     * {@inheritDoc}
     */
    @Override
    public RoutesBuilder createRouteBuilder() throws Exception {

    }

    @Test
    public void shouldProcess() throws Exception {

    }
}

Я пытаюсь издеваться над CcsRouteCommonProperties, как показано ниже @Mock private CcsRouteCommonProperties commonProps;

Как издеваться над полем выше, используя mockito(@RunWith(MockitoJUnitRunner.class))


person rocky    schedule 20.01.2019    source источник


Ответы (1)


Прямой ответ на ваш вопрос: использовать @InjectMocks на MainRouteBuilder и позволить Mockito вводить @Mock или @Spy из CcsRouteCommonProperties. Я надеюсь, что это краткое руководство объяснит вам это.

Решение будет примерно таким

@RunWith(MockitoJUnitRunner.class)
    public class MainRouteBuilderTest extends ExchangeTestSupport {

        @Mock
        CcsRouteCommonProperties commonProps;

        @InjectMocks
        MainRouteBuilder routeBuilder;

        @Override
        public RoutesBuilder createRouteBuilder() throws Exception {
                return routeBuilder;
        }

        @Test
        public void shouldProcess() throws Exception {

                when(commonProps.getSomething()).thenReturn(new Something());
        }
    }

Однако, если бы я был на вашем месте, я бы избегал магии @Autowired и использовал четко определенные зависимости, используя внедрение конструктора.

Конструктор маршрутов

public class MainRouteBuilder extends RouteBuilder {
private CcsRouteCommonProperties commonProps;
    public MainRouteBuilder( CcsRouteCommonProperties commonProps) {
        this.commonProps =  commonProps;
    }
    /**
        * {@inheritDoc}
        */
    @Override
    public void configure() throws Exception {

    }
}

Тестовое задание

@RunWith(MockitoJUnitRunner.class)
public class MainRouteBuilderTest extends ExchangeTestSupport {

    @Mock
    CcsRouteCommonProperties commonProps;

    @Override
    public RoutesBuilder createRouteBuilder() throws Exception {
            return new MainRouteBuilder(commonProps);
    }

    @Test
    public void shouldProcess() throws Exception {

    }
}
person ShellDragon    schedule 25.01.2019