Java で SpringFramework と Mockit は競合する2025年06月25日 11時57分46秒

Java を用いて Test Driven Development を基礎にプログラムを書いている。元々は他の人が初めたのを引き継いだプログラムだ。元々テストが少なくて、保守が大変なコード。取り敢えず、一年でテストの量を四倍に増やした。

Java は SpringFramework を用いていて、@Bean、@Autowired、@Lazy を沢山用いている。Mockito を用いて外部依存のデータ等を準備して、独立したテストに用いている。SpringFramwork も Mockit もリフレクションを用いて、コードに色々な機能を追加している。そのため、デバッガでブレイクポイントを付けて停止すると、見たことの無い関数が途中で呼ばえている。

同じクラスを Spy しようとしても、どうも @Autowired をしているクラスに依って動かない時がある。

残念だが、原因の特定は出来ていない。

今の所疑っているのは@Lazy。Mockito で関数を呼び、Spy を行う。SprintFramework が @Autowired されているメンバ変数を初期化する。@Autowired に @Lazy を付けると、その Bean クラスは最初の利用時に遅延される。

つまり、Spy を行った後に、@Lazy Bean が初期化されると Spy が上書きされると推察される。

まだ、この仮定を試せるテストが書けていない。また、このプログラムは大量に @Lazy を使っているので、@Lazy を止めるのも、これはこれでリスク。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2025/06/25/9784742/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。