Java junit重新加载类
我使用powermock来模拟Logger.getInstance()方法。这会导致一个问题,因为junit似乎没有重新加载类,并且在第一个测试类具有错误的记录器实例之后Java junit重新加载类,java,maven,junit,junit4,powermock,Java,Maven,Junit,Junit4,Powermock,我使用powermock来模拟Logger.getInstance()方法。这会导致一个问题,因为junit似乎没有重新加载类,并且在第一个测试类具有错误的记录器实例之后 public class LoggedClass { public static Logger log = Logger.getInstance(); .... } @RunWith(PowerMockRunner.class) @PrepareForTest({ LoggedClass.class, Log
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具有过期的日志实例。我可以显式地注入新的logger实例,但当有许多静态变量需要模拟时,这会很麻烦
如何将junit设置为每次运行新测试时都重新加载类?第二个测试失败的原因是,您正在为每个测试的
@Before
方法中创建log
的新实例,但由于对Logger.getInstance()
的调用是静态的它只发生一次。考虑在<代码> @ <代码> > <代码> > BeReqLass< /P> > < /P>
似乎没有理由为每个测试创建一个新的log
实例。它是一个mock
,因此可以重置。我考虑过这个问题,但我不想让日志模拟在测试之间共享。只需重置它即可。这与创建新的效果相同。