私の単体テストでは、テスト対象のBeanのいくつかのautowired依存関係にモックを使用したいと思います。モックが作成され、適切にユニットテストクラスに注入しますが、テスト中の豆に注入はBeanへのモック注入が失敗しました
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No matching bean of type [Service] found for
dependency: expected at least 1 bean which qualifies as autowire candidate for this
dependency. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
で失敗しました。これは、これはの一部である
<bean id="Service" class="org.easymock.EasyMock" factory-method="createMock">
<constructor-arg value="Service" ></constructor-arg>
</bean>
<bean id="Controller" class="Controller">
<property name="Service" ref="Service"></property>
</bean>
私の使用testContext.xmlです配線が
@Autowired
private Service service;
に失敗行ってきました。しかし、私は私のユニットテストクラス(ControllerTest.java)に同じモックをautowire場合、エラーが発生していないテスト中の豆(Controller.java)、
@Autowired
private Service service;
注入オブジェクトは、タイプ
($Proxy18) EasyMock for interface Service
試験下ビーンへの注入が不可能である理由を任意の提案が、試験作品への注射でありますか?
種類が ドミニク
あなたのヒントをありがとう!私は、モックを使用することは春には珍しいとは思わない。ユニットテストや統合テストでは、アプリケーションのいくつかの層を嘲笑することには、多くの理由があります。しかし、あなたが正しいです、ユニットテストか統合テストが必要かどうかに注意を払うべきです。 – Dominik
私はSpringアプリケーションでモックを使用することはまれであるとは思わない。 Springは実際にBeanのインスタンス化も処理するので、実際に擬似的にSpringを使用して擬似注入を行うのは珍しいと思っていました。しかし、私は私の答えからそのコメントを削除しました、率直に言って、私はそれを見たことがないので、それは珍しいことをどのように知っていますか?そんなにやるのは難しいようです。 – jhericks
あなたの提案には多くの感謝があります。私はその日にそれについて多くのことを思っています。なぜそれが珍しいのでしょうか。私はすべてのSpringコンテキストリンクから単体テストを負担することになりました。今ではAbstractJUnit4SpringContextTestsから派生したものではありません...そして、それは美しく、透明性と理解しやすさがテストアーキテクチャに入りました。コントローラは独自のコンストラクタで作成され、-mocked-dependenciesはReflectionTestUtilによって設定されます@Autowiredフィールドのためのセッターの欠如)...そしてそれはうまく、ありがとう! – Dominik