java - junit 重新加载类

标签 java maven junit junit4 powermock

我使用 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 具有过时的日志实例。我可以显式注入(inject)新的记录器实例,但是当有很多静态变量需要模拟时,这很麻烦。

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

最佳答案

第二个测试失败的原因是您正在为每个测试的 @Before 方法中创建一个新的 log 实例,但自从调用 Logger .getInstance()静态,它只发生一次。考虑在 @BeforeClass 中执行 @Before 中的操作。

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

关于java - junit 重新加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8121891/

相关文章:

java - 如何在 Java 中处理 BigDecimal 中的舍入

spring boot 多模块包

rest - 使用maven : "annotation are not supported in -source 1.3" 编译错误

java - jar 资源在测试中加载,但不在应用程序中加载

java - JUnit:无法加载 ApplicationContext(无合格 Bean)。本地没有问题

java - 将日历日期设置为当前日期

java - RSA 加密 Java、 key 交换

java - 即使返回404错误,tomcat是否创建线程

java - Maven 抛出空指针异常

java - 如何按源路径过滤从 Eclipse 调用的 JUNIT 测试