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

时间:2017-02-08 12:04:04

标签: java spring unit-testing spring-boot mockito

我的设置如下:

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中创建模拟时,它似乎调用了@PostConstruct,而这个@PostConstruct似乎在map字段初始化之前被调用,因此它会抛出异常。

我的问题是:

  • 为什么Mockito会打电话给@PostConstruct?
  • 如何禁用@PostConstruct进行模拟?

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

1 个答案:

答案 0 :(得分:2)

Mockito没有打电话给@Autowired - 春天是。你说在你的测试中你使用@Mock,这不是Mockito注释。

如果您打算使用@PostConstruct,您会发现Mockito不会调用您的@Mock Bean myBean; @Before public void before() { MockitoAnnotations.initMocks(); } 方法。

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

{{1}}