对于JUnit测试,我具有以下$dn = (Get-ADDomain).DistinguishedName
$list = $dn -split 'dc='
$dc1 = $list[($list.Length -2)] -replace ',',''
$dc2 = $list[($list.Length -1)]
方法:
@Before
此方法引发以下错误:
List<MyClass> allCombinations = new ArrayList<>();
@Before
public void generateCombinations() {
int index = 0;
char[] binaryChars = null;
MyClass myMockObj = mock(MyClass.class);
for (int i = 0; i < Math.pow(2, 15); i++) {
binaryChars = StringUtils.leftPad(Integer.toBinaryString(i), variables).toCharArray();
when(myMockObj.method1()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method2()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method3()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method4()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method5()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method6()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method7()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method8()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method9()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method10()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method11()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method12()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method13()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method14()).thenReturn(binaryChars[index++] == '0');
when(myMockObj.method15()).thenReturn(binaryChars[index++] == '0');
allCombinations.add(myMockObj);
index = 0;
}
}
我从here了解到错误是什么。但是,我不知道上面代码中出现此错误的原因。
答案 0 :(得分:0)
JUnit的一个有趣功能是,它为您运行的每个测试用例创建一个测试类的实例,并且在所有测试都运行完之前,这些实例不会发布给GC。
因此,如果您在测试用例中为实例变量分配了大量数据(例如在每次测试之前运行的generateCombinations方法中),则必须在测试之后手动释放数据。
尝试添加方法
@After
public void cleanup() {
allCombinations = null;
}
我们制作了一个工具,可以通过反射自动进行。
如果清理测试类无济于事,那么您只需要向其添加更多内存...