2017-02-08 21 views
1

私は次のように設定している:Mockito + Spring + @PostConstruct、モック初期化エラー、なぜ@PostConstructが呼び出されますか?

クラス:

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

テストクラス:Beanを@Autowires

MockitoがTestConfigでモックを作成しているときに、マップフィールドが初期化されて例外がスローされる前に呼び出されるように見える@PostConstructを呼び出します。

私の質問は:

  • なぜMockitoは@PostConstructを呼ぶのでしょうか?
  • mockingのために@PostConstructを無効にするにはどうすればよいですか?

EDIT:どうやらコールがインスタンス化の後に行われる春はコンフィグの@BeanメソッドからBeanをretrns直前

答えて

2

Mockitoは@PostConstructを呼び出していません - 春です。テストでは、@Autowiredを使用しますが、これはMockito注釈ではありません。

@Mockを使用する場合、Mockitoは@PostConstructメソッドを呼び出しません。言い換えれば

、このようなあなたのテストクラスを作成:

@Mock Bean myBean; 

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

あなたが右のように見えます。それは春です!しかし、これは '@Configuration'の' @Bean'メソッドでインスタンスが返された後に呼び出されます。どうすれば無効にできますか? – Whimusical

+0

私はあなたができると思うdonot。複数のコンポーネントの統合テストを書いているのでなければ、単体テスト用のモックを使う方が良いでしょう。 – john16384

関連する問題