Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java junit重新加载类_Java_Maven_Junit_Junit4_Powermock - Fatal编程技术网

Java 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

我使用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具有过期的日志实例。我可以显式地注入新的logger实例,但当有许多静态变量需要模拟时,这会很麻烦


如何将junit设置为每次运行新测试时都重新加载类?

第二个测试失败的原因是,您正在为每个测试的
@Before
方法中创建
log
的新实例,但由于对
Logger.getInstance()
的调用是
静态的
它只发生一次。考虑在<代码> @ <代码> > <代码> > BeReqLass< /P> > < /P>

似乎没有理由为每个测试创建一个新的
log
实例。它是一个
mock
,因此可以重置。

我考虑过这个问题,但我不想让日志模拟在测试之间共享。只需重置它即可。这与创建新的效果相同。