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

Whi*_*cal 5 java spring unit-testing mockito spring-boot

我有一个类似的设置:

豆类

private final Map<String, String> configCache = new HashMap<>();
@PostConstruct
private void fillCache() {  (...) configCache.clear();} 
Run Code Online (Sandbox Code Playgroud)

测试配置类:

@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
@Primary
public Bean beanMock() {
    return Mockito.mock(Bean.class);
}
Run Code Online (Sandbox Code Playgroud)

测试类:其中@Autowires的bean。

似乎当 Mockito 在 TestConfig 中创建模拟时,它调用 @PostConstruct 似乎在初始化 map 字段之前调用它,因此它抛出异常。

我的问题是:

  • 为什么 Mockito 调用@PostConstruct?
  • 如何禁用@PostConstruct 进行模拟?

编辑:显然调用是在 Spring 从 Config 的 @Bean 方法中重新获取 bean 之前的实例化之后完成的

joh*_*384 4

Mockito 没有打电话@PostConstruct——Spring 来了。你说在你的测试中你使用@Autowired,这不是 Mockito 注释。

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

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

@Mock Bean myBean;

@Before
public void before() {
    MockitoAnnotations.initMocks();
}
Run Code Online (Sandbox Code Playgroud)