Java は SpringFramework を用いていて、@Bean、@Autowired、@Lazy を沢山用いている。Mockito を用いて外部依存のデータ等を準備して、独立したテストに用いている。SpringFramwork も Mockit もリフレクションを用いて、コードに色々な機能を追加している。そのため、デバッガでブレイクポイントを付けて停止すると、見たことの無い関数が途中で呼ばえている。
同じクラスを Spy しようとしても、どうも @Autowired をしているクラスに依って動かない時がある。
残念だが、原因の特定は出来ていない。
今の所疑っているのは@Lazy。Mockito で関数を呼び、Spy を行う。SprintFramework が @Autowired されているメンバ変数を初期化する。@Autowired に @Lazy を付けると、その Bean クラスは最初の利用時に遅延される。
つまり、Spy を行った後に、@Lazy Bean が初期化されると Spy が上書きされると推察される。
まだ、この仮定を試せるテストが書けていない。また、このプログラムは大量に @Lazy を使っているので、@Lazy を止めるのも、これはこれでリスク。
セコメントをする