質問

クラスには、SpringアプリケーションCTXをロードしたい静的変数があるユニットテストの問題があります。

このクラスはBean Factoryから出てきておらず、この事実を変えることはできません。

static ApplicationContext applicationContext = ...;

これは正常に機能しますが、難しいです jmock, 、または少なくとも私は方法を知りません、そして、私が春のCTXを開始したいと思うまで。ユニットテストの状況には理想的ではありません。

誰もが知っている仕事はありますか?静的変数を私が望むものに変更するオプションがあります。

ありがとう。

役に立ちましたか?

解決

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

最終的には本当にシンプルでした。 Justedは、私がock笑することができるクラスで私の静的を包む必要があります。

public class ApplicationContextHolder implements ApplicationContextHoldable {

    protected static ApplicationContext applicationContext = ...;

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

}

他のヒント

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

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

    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;

    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top