首页 > 解决方案 > 如何在 ExchangeTestSupport 中使用 mockito

问题描述

我有骆驼路线如下

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)) 模拟上述字段

标签: apache-camelmockitospring-camel

解决方案


直接回答您的问题是使用@InjectMocksonMainRouteBuilder并让 Mockito 注入一个@Mockor @Spyof 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 {

    }
}

推荐阅读