jmockを使用してJavaの静的変数をmock笑する方法
-
21-09-2019 - |
質問
クラスには、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;
}
所属していません StackOverflow