gpt4 book ai didi

java - 在 @BeforeStep 之前初始化测试中的 Mock

转载 作者:行者123 更新时间:2023-12-02 00:51:28 25 4
gpt4 key购买 nike

我有一个带有 @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。

有没有办法实现我想要的,或者我需要用不同的方法来实现它?

最佳答案

经过与同事的反射(reflection),他给了我一个解决方案:

@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();
(...)
}
}

关于java - 在 @BeforeStep 之前初始化测试中的 Mock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57853877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com