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

标签 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 中创建 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/

相关文章:

java - Android Studio - AlertDialog 中的 DatePicker,空对象引用

unit-testing - 尝试在 TCP 监听器上提供服务时,由于超时,Go 测试模棱两可地失败

python - 在单元测试中运行 Celery worker

java - spring 配置嵌入式 BrokerService

java - Mockito 无法在 Spring 中使用自定义 validator

java - 如何在从移动客户端调用的 Spring REST Web 服务中创建和销毁 session

c# - 如何在c#中使用moq.mock模拟调用静态类的方法

java - H2 内存数据库。找不到表

Java 使用 lambda 迭代映射器方法?

java - Apache Beam : Writing values of key, 根据 key 对文件进行值对