apache-camel - 如何在 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)) 模拟上述字段
解决方案
直接回答您的问题是使用@InjectMocks
onMainRouteBuilder
并让 Mockito 注入一个@Mock
or @Spy
of 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 {
}
}
推荐阅读
- amazon-web-services - 从参数文件中读取创建更改集
- matlab - 在 MATLAB 中使用向量值输入最小化函数
- php - 如何使用 PHP 从外部 html 文件中删除具有特定 id 的 div?
- r - 条形图中每个条形的ggplot计数百分比
- sql - SQL 语句中的嵌套循环
- android - 我无法访问我的 Firebase Crashlytics 仪表板
- javascript - React 原生 Expo Intent 打开应用传递参数
- c - c 函数不适用于所有尝试发送的文件
- laravel-5 - Laravel 中的远关系
- python - 有没有办法在 VSCode 的新窗口中打开图表?