Java で SpringFramework と Mockit は競合する
2025-06-25


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 を止めるのも、これはこれでリスク。

[java]
[Programming]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット