私は外部WebサービスにアクセスするWebアプリケーションを持っています。私は、Webアプリケーション用の自動受諾テストスイートを作成しています。私はそれが深刻なオーバーヘッドを持っているので、外部Webサービスを呼び出すしたくない、私はこのWebサービスを模擬したい。 Webアプリケーションのアプリケーションコンテキストを変更せずに、これをどのように達成できますか?私たちは最近Spring 3.1に移行したので、私は新しい環境機能を使いたいと思っています。これらの新機能は、この単一のWebサービスをオーバーライドしてアプリケーションのコンテキストをそのままにしておくのに役立ちますか?アプリケーションコンテキストで定義された単一のBeanをオーバーライドする方法
6
A
答えて
4
これを行うには、BeanFactoryPostProcessor
を使用します。これは、この模擬したいテストシナリオにのみ登録されています。
BeanFactoryPostProcessor
を使用すると、アプリケーション・コンテキストを作成して移入した直後にアプリケーション・コンテキストを変更できます。特定のBeanの名前を検索し、別のBeanを登録することができます。
public class SystemTestBeanFactoryPostProcessor implements BeanFactoryPostProcessor
{
@Override
public void postProcessBeanFactory(final ConfigurableListableBeanFactory factory) throws BeansException
{
final MyInterface myInterface = new MyInterfaceStub();
factory.registerSingleton("myInterfaceBeanName", myInterface);
}
}
これにより、スタブ/モックする豆だけを上書きすることができます。
これは、このようなことを行うための「最新の3.x」方法であるとは確信していません。しかし、それは非常に簡単で実装が簡単です。
9
私はSpringの@Profile機能を使用しますが、これはあなたが参照していた「環境機能」です。例えば
:
@Service @Profile("dev")
public class FakeWebService implements WebService {
}
@Service @Profile("production")
public class ExternalWebService implements WebService {
}
EDIT
そして、あなたのテストに使用するプロファイルを指定するには:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/app-config.xml")
@ActiveProfiles("dev")
public class MyAcceptanceTest {
}
は、より多くの詳細については、春のドキュメントのthis sectionを参照してください。
あり生産でアクティブなプロファイルを設定するには、いくつかの方法がありますが、私が前に使ってきた方法は、web.xmlにある:
あなたがあなたの中で使用している `Profile`指定しない<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>spring.profiles.active</param-name>
<param-value>production</param-value>
</init-param>
</servlet>
関連する問題
- 1. アプリケーションコンテキスト(Spring)のJava Bean定義
- 2. XML定義をオーバーライドするBeanアノテーション - Spring
- 3. Spring Mvc、アノテーションによるbean定義のオーバーライド方法
- 4. 子コンテキストで親コンテキストで定義されたBeanをオーバーライドします
- 5. タイプの[org.springframework.batch.item.file.mapping.DefaultLineMapper]の一意のBeanが定義されていません:予期される単一の一致するBeanですが、見つかった3
- 6. LUISで定義された単語リストにエンティティを一致させる方法
- 7. は「X」BeanのBean定義をオーバーライド:交換[一般的な豆Y]
- 8. [com.Car]タイプの一意のBeanは定義されていません:期待される単一のBeanですが見つかりました0:
- 9. クラス内で定義されたenumのstd :: hashをオーバーライドする方法は?
- 10. [javax.persistence.EntityManagerFactory]タイプの適格なBeanが定義されていません:予期される単一の一致するBeanが見つかりました2
- 11. Springアプリケーションコンテキスト外でSpring Beanを作成する方法
- 12. Drupal 6モジュールで定義されたテーマ関数をオーバーライドする方法は?
- 13. SpringBootTestのアプリケーションBeanをオーバーライドする方法
- 14. xml定義から追加のBeanを既に初期化されているアプリケーションコンテキストに登録する
- 15. 指定された単一のクライアントに接続する方法
- 16. Spring Bean定義でdefault-lazy-init = trueをオーバーライドします
- 17. サードパーティのコンポーネントで定義されているデフォルトのネストされたスタイルをオーバーライドする方法
- 18. Springアプリケーションコンテキストですでに定義されているリストとマップを拡張する方法は?
- 19. Djangoにインストールされているアプリケーションで定義されたモデルをオーバーライドする方法は?
- 20. ASP.NET MVC 3の特定のビューの_ViewStartで定義されたレイアウトをオーバーライドする方法は?
- 21. 指定されたプロファイルのためにスキップされたXML Bean定義ファイル[デフォルト]一致しません
- 22. アセンブリで定義されたXAMLリソースの一覧を取得する方法は?
- 23. Craftercms:SpringでシングルトークサービスBean(Groovyで記述)を定義する方法は?
- 24. Springで定義されたEHCache Beanの変更
- 25. SL4Jを使用して、applicationContext.xmlで定義されたBeanの例外を別のファイルに記録する方法
- 26. オブジェクトのクラスに対して定義された単一のイベントをトリガーする方法
- 27. モデルフォーム上の単一項目をオーバーライドする方法
- 28. Javaのコンフィグレーションでspring beanをオーバーライドする方法
- 29. Beanが定義された後のSpring Beanの注入 - 注入の特性
- 30. Spring Bootであらかじめ定義されたBean
テスト構成(または本番構成)? –
いくつかの例で私の答えを更新しました。必要に応じてbeans.xmlでプロファイル設定を使用することもできます。 – seanhodges
+1ありがとうございます!非常に良い例。 –