powermockを使用してLogger.getInstance()メソッドをモックします。これは、junitがクラスをリロードしないようであり、最初のテストテストクラスの後に間違ったロガーインスタンスがあるため、問題を引き起こします。
public class LoggedClass {
public static Logger log = Logger.getInstance();
....
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({ LoggedClass.class, Logger.class })
public class SomeTests {
private Logger log;
@Before
public void setUp() {
PowerMockito.mockStatic(Logger.class);
log = PowerMockito.mock(Logger.class);
PowerMockito.when(Logger.getInstance()).thenReturn(log);
PowerMockito.mockStatic(LoggedClass.class);
}
@Test
public void firstTest() {
assertTrue(LoggedClass.log == log);
}
@Test
public void secondTest() { // fails
assertTrue(LoggedClass.log == log);
}
}
LoggedClassのログインスタンスが古くなっているため、テストは失敗します。明示的に新しいロガーインスタンスを挿入することもできますが、モックする必要のある静的変数がたくさんある場合は面倒です。
新しいテストを実行するたびにクラスをリロードするようにjunitを設定するにはどうすればよいですか?