2017-02-08 5 views
1

У меня есть установить, как:Mockito + Spring + @PostConstruct, ложная ошибка инициализации, почему вызывается @PostConstruct?

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

Test класс: который @Autowires боб.

Похоже, что Mockito создает макет в TestConfig, он вызывает @PostConstruct, который, по-видимому, вызывается до того, как поле карты инициализируется, поэтому оно выдает исключение.

Мой вопрос:

  • Почему Mockito называют @PostConstruct?
  • Как отключить @PostConstruct для насмешек?

EDIT: Видимо вызов делается после конкретизации как раз перед весной retrns боба из @Bean методы конфига в

ответ

2

Mockito не называет @PostConstruct - Весна. Вы говорите, что в вашем тесте вы используете @Autowired, что не является аннотацией Mockito.

Если вы хотите использовать @Mock, вы обнаружите, что Mockito не назовет ваш метод @PostConstruct.

Другими словами, написать тестовый класс, как это:

@Mock Bean myBean; 

@Before 
public void before() { 
    MockitoAnnotations.initMocks(); 
} 
+0

Вы, кажется, правы. Весна!! Но он вызывается после возвращения экземпляра в '@ Configuration'' @ Bean'. Как я могу отключить его? – Whimusical

+0

Не думаю, что вы можете. Если вы не пишете интеграционный тест для нескольких компонентов, вам лучше использовать макеты для модульного тестирования. – john16384

Смежные вопросы