一尘不染

Mockito + Spring + @PostConstruct,模拟初始化错误,为什么调用@PostConstruct?

spring-boot

我有一个像这样的设置:

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);
}

测试 类:哪个@Autowiresbean。

看起来当Mockito在TestConfig中创建模拟时,它会调用@PostConstruct,而后者似乎在初始化map字段之前被调用,因此会引发异常。

我的问题是:

  • 为什么Mockito调用@PostConstruct?
  • 如何禁用@PostConstruct进行嘲笑?

编辑:显然,调用是在实例化之后完成的,就在Spring从Config的@Bean方法撤消bean之前


阅读 938

收藏
2020-05-30

共1个答案

一尘不染

Mockito没有打电话-Spring @PostConstruct是。您说在测试中使用@Autowired,它不是Mockito批注。

如果您打算使用@Mock,则会发现Mockito不会调用您的@PostConstruct方法。

换句话说,像这样编写测试类:

@Mock Bean myBean;

@Before
public void before() {
    MockitoAnnotations.initMocks();
}
2020-05-30