gpt4 book ai didi

memory-leaks - 内存泄漏与 powermockito 简单测试

转载 作者:行者123 更新时间:2023-12-05 03:06:58 27 4
gpt4 key购买 nike

我有以下 powermock 测试:

@RunWith(PowerMockRunner.class)
@PrepareForTest({DaoCaseTypeDefinition.class, QDataContext.class})
public class PowermockTest {

private static QDataContext m_dc;
private static DaoCaseTypeDefinition m_daoCaseTypeDefinition;

@Test
public void test() throws Exception {
m_dc = mock(QDataContext.class);
m_daoCaseTypeDefinition = mock(DaoCaseTypeDefinition.class);
when(m_daoCaseTypeDefinition.findAll(m_dc))
.thenReturn(Collections.EMPTY_LIST);

DaoCaseTypeDefinition daoCaseTypeDefinition = new DaoCaseTypeDefinition();
List<CaseTypeDefinition> all = daoCaseTypeDefinition.findAll(m_dc);

System.out.println("sleep");
Thread.sleep(2000);
}

@AfterClass
public static void after() throws InterruptedException {
m_daoCaseTypeDefinition = null;
m_dc = null;
System.out.println("done");
Thread.sleep(2000);
}
}

在此测试中,我在 jdk1.8 上使用 PowerMockito 1.7.1(顺便说一句,也使用了 PowerMockito 2)。当我让 Intellij 一遍又一遍地运行这个测试并将 VisualVM 附加到它时,很明显我有内存泄漏。

visualvm memory leak by powermockito

我注意到,对于每个用 PowerMockRunner.class 注释的测试类,都会创建一个 MockClassloader 实例,该实例包含对 DaoCaseTypeDefinition 的引用。不幸的是,模拟类加载器实例永远不会恢复。

我的测试中有什么地方做错了吗?为什么垃圾回收不清除 mockclassloader 实例?

最佳答案

虽然我没有找到解决这个问题的方法,但我确实找到了解决方法。

我正在使用 Maven,这允许我通过配置 fork 来创建新的 jvm 进程。这样,根据配置,我可以指示何时终止用于运行 powermock 单元测试的 jvm 进程。

这样内存泄漏就不会导致内存不足。看 Fork Options and Parallel Test Execution

关于memory-leaks - 内存泄漏与 powermockito 简单测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48665288/

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