私は、プライベート静的最終変数を模倣して初期化するシングルトンに呼び出す次のクラスをテストしようとしています。thisの例に従ってください。mockitoとreflectionを使ってこのプライベート静的最終変数を欺くのはどうしたらいいですか?
は、ここで私は状況が列挙型である
public class ClassToTest {
private static final boolean CONF_FLAG = Configuration.getConfig()
.get(Status.Initialization).getConfFlag(); // throws an NPE
public methodToTest(TestObject a){
...
}
}
をやっているものです。
Testクラス:
public class TestClassToTest{
TestObject a;
ClassToTest t;
@Before
public void setUp() throws Exception {
setFinalStatic(ClassToTest.class.getDeclaredField("CONF_FLAG"), true);// this fails!
a = mock(TestObject.class);
t = new ClassToTest();
}
static void setFinalStatic(Field field, Object newValue) throws Exception {
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
}
私はCONF_FLAG
の値を気にしませんが、カントはそれを嘲笑するように見えます。私は間違って何をしていますか? TestClassToTest
で
+1。ここで追加するには、呼び出しが静的フィールド初期化の一部として行われる限り、呼び出しのタイミングをほとんど制御できず、テストのために置き換える機会は事実上ありません。大まかに言えば、例外を投げたり、テストで疑惑を犯すような呼び出しが危険な場合は、スタティックイニシャライザを使用したくない場合があります。 –
@Jeff Bowman、@ ck1ええ、私は完全に静的初期化子に置かない部分を理解していますが、これは私が打ち負かされたレガシーコードです。私はちょっと振る舞います。 'getConfig()'は静的メソッドです。シングルトンへの呼び出し全体をモック/スタブする方法はありますか?はいの場合、Idはいくつかのコード/擬似コードを非常に感謝しています。 – MuleNoob