JUnit を使用した単体テストの目的で、Mockito モック オブジェクトを Spring (3+) Bean に挿入したいと考えています。現在、Bean の依存関係は、@Autowired
プライベート メンバー フィールドのアノテーションを使用して挿入されています。
使用を検討しましたReflectionTestUtils.setField
が、注入したい Bean インスタンスは実際にはプロキシであるため、ターゲット クラスのプライベート メンバー フィールドを宣言しません。依存関係にパブリック セッターを作成したくありません。そうすると、純粋にテスト目的でインターフェイスを変更することになるからです。
私はいくつかフォローしましたアドバイスSpring コミュニティによって提供されていますが、モックは作成されず、自動配線は失敗します。
<bean id="dao" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="com.package.Dao" />
</bean>
現在発生しているエラーは次のとおりです。
...
Caused by: org...NoSuchBeanDefinitionException:
No matching bean of type [com.package.Dao] found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this dependency.
Dependency annotations: {
@org...Autowired(required=true),
@org...Qualifier(value=dao)
}
at org...DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(D...y.java:901)
at org...DefaultListableBeanFactory.doResolveDependency(D...y.java:770)
値を無効な値に設定すると、constructor-arg
アプリケーション コンテキストの起動時にエラーは発生しません。
ベストアンサー1
最善の方法は次のとおりです。
<bean id="dao" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="com.package.Dao" />
</bean>
更新
コンテキスト ファイルでは、このモックは、それに依存する自動配線フィールドが宣言される前にリストされる必要があります。