我有这样的设置:
Bean类:
private final Map<String, String> configCache = new HashMap<>();
@PostConstruct
private void fillCache() { (...) configCache.clear();}
TestConfig类:
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
@Primary
public Bean beanMock() {
return Mockito.mock(Bean.class);
}
测试类:@Autowires
bean。
似乎当 Mockito 在 TestConfig 中创建 mock 时,它调用了 @PostConstruct,后者似乎在 map 字段初始化之前被调用,因此它抛出异常。
我的问题是:
- 为什么 Mockito 调用 @PostConstruct?
- 如何禁用 @PostConstruct 进行模拟?
编辑:显然调用是在实例化之后完成的,就在 Spring 从 Config 的 @Bean 方法返回 bean 之前
最佳答案
Mockito 不调用 @PostConstruct
—— Spring 调用。你说在你的测试中你使用了 @Autowired
,这不是 Mockito 注释。
如果您打算使用 @Mock
,您会发现 Mockito 不会调用您的 @PostConstruct
方法。
换句话说,像这样编写你的测试类:
@Mock Bean myBean;
@Before
public void before() {
MockitoAnnotations.initMocks();
}
关于java - Mockito + Spring + @PostConstruct,mock初始化错误,为什么调用@PostConstruct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42112625/