gpt4 book ai didi

java - junit 重新加载类

转载 作者:行者123 更新时间:2023-12-02 08:06:14 25 4
gpt4 key购买 nike

我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com