java - 在 @BeforeStep 之前初始化测试中的 Mocks
问题描述
我有一个带有 @BeforeStep 函数的自定义阅读器,以便初始化一些数据。这些数据来自外部数据库。
@Component
public class CustomReader implements ItemReader<SomeDTO> {
private RestApiService restApiService;
private SomeDTO someDTO;
@BeforeStep
private void initialize() {
someDTO = restApiService.getData();
}
@Override
public SomeDTO read() {
...
return someDTO
}
}
在我的单元测试中,我需要模拟对外部数据库的调用。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = NedBatchApplication.class)
public class CustomReaderTest {
@Autowired
CustomReader customReader;
@Mock
RestApiService restApiService;
@Before
private void setup() {
MockitoAnnotations.initMocks(this);
ReflectionTestUtils.setField(customReader, "restApiService", restApiService);
Mockito.when(restApiService.getData().thenReturn(expectedData);
}
}
我面临的问题是@BeforeStep 在单元测试的@Before 之前执行,当我启动我的测试时。所以restApiService.getData() 返回null 而不是expectedData。
有没有办法实现我想要的,或者我需要用不同的方法来做到这一点?
解决方案
经过与同事的反思后,他给了我一个解决方案:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = NedBatchApplication.class)
public class CustomReaderTest {
CustomReader customReader;
@Mock
RestApiService restApiService;
@Before
private void setup() {
MockitoAnnotations.initMocks(this);
Mockito.when(restApiService.getData().thenReturn(expectedData);
this.customReader = new CustomReader(restApiService);
}
@Test
public void test() {
customReader.initialize();
(...)
}
}
推荐阅读
- excel - Power BI DAX 表
- nginx - 如何配置nginx的default.conf
- c++ - Microsoft VS2015 C++ 核心指南分析:vtable 的“没有指向指针衰减的数组(bounds.3)”?
- java - 在模块路径上使用 OpenJFX 11 JMODS 在 JDK 11 上运行 javafx 示例
- pandas - 使用具有 NA 值的字段通过 tensorflow 进行模型训练
- apache-spark - spark driver pod 卡在 Waiting:Kubernetes 中的 PodInitializing 状态
- c# - 透明Picturebox通过绘制的图形是透明的;想要显示绘制的图形
- python - Django ManyToMany为自引用属性创建重复关系
- android - 根据TextView的高度设置ImageView的高度
- javascript - 使用 reactjs 添加动态表单字段