8

同様の質問がされていることは知っていますが、検索を行ったところ、ここで満足している解決策に出くわしまし

ただし、私の唯一の問題は、このソリューションを実装する方法がわからないことです。

私ができるようにしたいのは、HotswappableTargetSource を介して、アプリケーション コンテキスト内の選択した Bean の Bean 定義をテスト バージョンでオーバーライドし、テストを実行することです。

次に、テスト ケースごとにホット スワップ可能にする Bean を指定し、各テストで独自のモック バージョンを作成してそれらをスワップし、再度スワップできるようにする必要があります。

テストが実行されているアプリケーション コンテキストを取得できますが、Bean をホット スワップ可能に構成する方法がわかりません。xml を使用して Bean を構成する方法は知っていますが、xml を使用して Bean を構成する方法に戻りたくありません。

4

1 に答える 1

9

更新:それを行うライブラリがあります!

https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations

解決策は次のとおりです。

アプリケーションのスプリング コンテキストを変更して、スワップする Bean をプロキシする必要があります。

<bean id="beanSwappable" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="targetSource" ref="beanSwap" />
</bean>

<bean id="beanSwap" class="org.springframework.aop.target.HotSwappableTargetSource">
    <constructor-arg ref="beanToSwap" />
</bean>
  • beanSwap は、この beanSwap のプロキシです。
  • beanSwappable は、Bean を交換するときに参照する Bean です。
  • beanToSwap は Bean のデフォルトの実装です

したがって、テスト中のシステムを変更する必要があります。

テストでは、コードは次のようになります。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "test.xml", "spring.xml" })
public class Test {

    @Resource(name="beanSwappable")
    Bean b;

    @Resource(name = "beanSwap")
    HotSwappableTargetSource beanSwap;

    public void swap() {
        Bean b = << create mock version >>
        beanSwap.swap(b);
        // run test code which

    }
}
于 2010-11-29T10:55:33.723 に答える