【发布时间】:2021-06-06 05:42:06
【问题描述】:
我有一个服务,它有一个我想模拟的 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();
}
}
【问题讨论】:
-
您不能在应用程序上下文设置后调用您的测试。您真的需要为此进行集成测试吗?为什么不写一个合适的单元测试呢。
-
好吧,因为它是(更大的)集成测试的一部分。这部分当然会引起问题......
标签: java spring spring-boot spring-boot-test