2

SpringApplicationCtxをロードしたい静的変数がクラスにあるユニットテストの問題があります。

このクラスはBeanFactoryから出てこないので、この事実を変更することはできません。

static ApplicationContext applicationContext = ...;

これは問題なく動作しますが、JMockを実行するのは困難です。少なくとも、方法がわからず、SpringCtxが起動したいと思うようになるまでは。単体テストの状況には理想的ではありません。

誰かが知っている回避策はありますか?静的変数を好きなように変更するオプションがあります。

ありがとう。

4

3 に答える 3

1

これを自分で解決しました。

結局は本当にシンプルでした。静的なものをクラスにラップする必要があり、それをモックすることができます。

public class ApplicationContextHolder implements ApplicationContextHoldable {

    protected static ApplicationContext applicationContext = ...;

    @Override
    public ApplicationContext getApplicationContext() {
        return ApplicationContextHolder.applicationContext;
    }

}
于 2009-09-08T09:58:10.047 に答える
-1

良い。皮肉なことに、Springが得意とすることの1つはシングルトンの管理であるため、静的変数は必要ありません:)

于 2010-01-22T13:02:32.227 に答える
-1

リフレクションベースのJMockAPIを使用して、プライベート/静的フィールドを設定できます

    import static mockit.Deencapsulation.setField;
    //Test method
    public void testSample {
        setField(Sample.class,"isPrivate",true);
        setField(Sample.class,"isStatic",true);
    }

    private class Sample {
        private boolean isPrivate = false;
        private boolean isStatic = false;

    }
于 2013-08-08T04:59:26.573 に答える