我有以下@BeforeJUnit 測試方法:List<MyClass> allCombinations = new ArrayList<>();@Beforepublic 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; }}此方法引發(fā)以下錯誤:java.lang.OutOfMemoryError: GC overhead limit exceededClose stacktraceat java.util.Arrays.copyOf(Arrays.java:3236)我從這里了解錯誤是什么。但是,我不知道上面代碼中出現(xiàn)此錯誤的原因。
1 回答

智慧大石
TA貢獻1946條經(jīng)驗 獲得超3個贊
JUnit 的一個有趣特性是它為您運行的每個測試用例創(chuàng)建一個測試類的實例,并且在所有測試都運行之前,這些實例不會為 GC 釋放。
因此,如果您在測試用例中將大量數(shù)據(jù)分配給實例變量(例如在每次測試之前運行的 generateCombinations 方法中),您必須在測試后手動釋放數(shù)據(jù)。
嘗試添加方法
@After
public void cleanup() {
allCombinations = null;
}
我們制作了一個工具,它可以通過反射自動完成。
如果清理測試類沒有幫助,那么你只需要投入更多的內(nèi)存......
添加回答
舉報
0/150
提交
取消