我有一项服务 DataProvider
我想嘲笑一下。
问题:服务使用中的数据提供程序 @PostConstruct
. 但当我使用 @MockBean
中不存在模拟值 @PostConstruct
.
我能做什么?
@Service
public class MyService {
private List<Object> data;
@Autowired
private DataProvider dataProvider;
@PostConstruct
public void initData() {
data = dataProvider.getData();
}
public void run() {
System.out.println(data); //always null in tests
}
}
@SpringBootTest
public class Test {
@MockBean
private DataProvider dataProvider;
@Test
public void test() {
when(dataProvider.getData()).thenReturn(mockedObjects);
//dataProvider.init(); //this fixes it, but feels wrong
service.run();
}
}
1条答案
按热度按时间x759pob21#
imho单元测试
MyService
对于这个特定的场景来说,这是一个更好的解决方案(而且我不会觉得打电话是错的)initService
如果你坚持的话。。。你可以简单地覆盖
DataProvider
为这个特定的测试定义bean并预先模拟它,例如:您可能需要设置
spring.main.allow-bean-definition-overriding
至true
为上述工作。