Как использовать mockito в ExchangeTestSupport - PullRequest
0 голосов
/ 20 января 2019

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

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))

1 Ответ

0 голосов
/ 25 января 2019

Прямым ответом на ваш вопрос было бы использовать @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 магия и использование четко определенных зависимостей с помощью инжектора конструктора.

Route Builder

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 {

    }
}
...