JUnit、EasyMock、または PowerMock を使用して、静的な最終変数をモックするだけでなく、i18n クラスをモックしたいと考えています。それ、どうやったら出来るの?
65642 次
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 に答える