2012-01-21 24 views
2

私はspring(SpringJUnit4ClassRunnerと@ContextConfiguration)を使ってテストを行っています。テストは並行して実行されます。 私の豆の一部はシングルトンで、テストのスコープ「スレッド」に入るように変更したいと思います。私はそれぞれのテストが独自のBeanのインスタンスを持つことを望みます。テスト中に多くのSpring Beanのスコープを変更する

私は、applicationContext.xmlファイルと、テストに使用されるapplicationTestContext.xmlファイルを用意して管理しました。 applicationTestContext.xmlでは、スコープ「thread」を持つBeanを定義します。

この問題は、そのタイプの新しいBeanを追加するたびに、applicationContext.xmlとapplicationTestContext.xmlの両方に追加する必要があります。これはかなり面倒です。 ボイラープレートを少なくしてやる方法はありますか?

+1

あなたのアプリはシングルスレッドアプリケーションですか?そうでなければ、Beanはあなたのアプリでも並行して使われるので、あなたのテストでも並行して使うことができるはずです。または私は何かを逃していますか? –

+0

テストは、setUpおよびtearDownでBeanの状態をリセットします。これはテストには役立ちますが、アプリで何か起こることはありません。このため、テストで同じインスタンスを共有したくないのです。 – davidbrai

+0

OK。理解しています。 –

答えて

3

スコープをカスタマイズしたいすべてのBeanを収集し、別のBean設定ファイルに入れます。これはapplicationContextapplicationTestContextの両方から含まれています。

<import resource="customScopedBeans.xml"/> 

は、次にスコープ

<bean class="com.Foo" scope="${threadOrSingleton}" /> 

のためのプレースホルダを使用して、親の設定ファイルでは異なるプロパティを宣言します。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="properties"> 
     <value>threadOrSingleton=thread</value> 
    </property> 
</bean> 
関連する問題