我使用 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在每次运行新测试时重新加载类?