/ / Pourquoi mon test testNG obtient-il java.lang.OutOfMemoryError - java, exception, testng

Pourquoi mon test testNG obtient-il java.lang.OutOfMemoryError - java, exception, testng

Je crée un test testNG simple, il ne fonctionne pas et jette OutOfMemoryError. Je ne trouve pas la cause.

Ce que j'ai fait:

Je calcule la taille de ce grand double tableau,et c’est environ 76 Mo, ce qui est inférieur à la taille maximale du tas. Je pense que la cause est dans testNG. Je ne suis pas certain de savoir comment testNG transmet le paramètre m'a perturbé). J’ai beaucoup cherché sur "Comment testNG passe le paramètre" via Google mais je n’ai pas obtenu d’informations utiles. Donc, tout le monde peut aider à identifier la cause fondamentale, merci.

Environnement:

Yosemite 10.10
Java 1.8.0_25
Eclipse luna 4.4.1
-XX:MaxPermSize=256m
-Xms40m
-Xmx512m

Code:

import java.util.Arrays;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestNGTest {
static int ARRAY_SIZE = 10000000;

@DataProvider(name = "array to sort")
public static Object[][] arrayProvider() {
double[] myArray = new double[ARRAY_SIZE];
for (int i = 0; i < ARRAY_SIZE; i++) {
myArray[i] = Math.random();
}
return new Object[][] { { myArray } };
}

@Test(dataProvider = "array to sort")
public void testSort(double[] array) {
Arrays.sort(array);
}

}

Résultat:

FAILED: testSort
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3332)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:137)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:121)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:421)
at java.lang.StringBuilder.append(StringBuilder.java:136)
at org.testng.remote.strprotocol.TestResultMessage.toString(TestResultMessage.java:320)
at org.testng.remote.strprotocol.TestResultMessage.<init>(TestResultMessage.java:106)
at org.testng.remote.strprotocol.TestResultMessage.<init>(TestResultMessage.java:124)
at org.testng.remote.strprotocol.RemoteTestListener.onTestFailure(RemoteTestListener.java:72)
at org.testng.internal.Invoker.runTestListeners(Invoker.java:1895)
at org.testng.internal.Invoker.runTestListeners(Invoker.java:1879)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:778)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
at org.testng.TestNG.run(TestNG.java:1057)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)

Réponses:

2 pour la réponse № 1

Le problème est en fait susceptible d’être TestNG, bien que pour être absolument sûr que nous aurions besoin de voir plus de traces de la pile.

Lors de la génération du rapport, TestNG essaie probablement de convertir votre tableau en chaîne afin de l'utiliser comme nom de votre scénario de test.

La solution la plus simple (à part de ne pas utiliser de tableaux gigantesques dans un test unitaire) consiste à envelopper le tableau dans un objet doté toString() méthode qui ne nécessite pas d’imprimer l’ensemble du tableau.