28

JUnit、EasyMock、または PowerMock を使用して、静的な最終変数をモックするだけでなく、i18n クラスをモックしたいと考えています。それ、どうやったら出来るの?

4

2 に答える 2

49

変数をモックするようなものはありますか?私はそれを再割り当てと呼びます。EasyMock や PowerMock がフィールドを再割り当てする簡単な方法を提供するとは思いませんstatic final(奇妙なユースケースのように聞こえます)。

それを行いたい場合は、おそらく設計に問題がありますstatic final。テスト目的であっても、変数が別の値を持つ可能性があることがわかっている場合は、回避 (またはより一般的にはグローバル定数) を避けてください。

とにかく、リフレクションを使用してそれを達成できます( from: Using Reflection to change static final File.separatorChar for unit testing? ):

static void setFinalStatic(Field field, Object newValue) throws Exception {
    field.setAccessible(true);

    // remove final modifier from field
    Field modifiersField = Field.class.getDeclaredField("modifiers");
    modifiersField.setAccessible(true);
    modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);

    field.set(null, newValue);
}

次のように使用します。

setFinalStatic(MyClass.class.getField("myField"), "newValue"); // For a String

破棄するときは、フィールドを元の値にリセットすることを忘れないでください。

于 2012-03-14T08:04:06.543 に答える