我有多个JUnit测试,分别运行每个测试时,每个调用递归函数都通过,但是当我尝试运行测试类时,第一个测试通过了,在其余测试中,我得到了StackOverflow异常。贝娄是测试的一个例子,还有更多。我还尝试了调用Runtime.getRuntime().gc();
和Runtime.getRuntime().freeMemory();
,以在每次测试后清除调用堆栈,但无济于事。
编辑:我找到了解决方案,我在一个类中有一个静态属性,该属性仅在第一次测试时初始化,而在后续测试中没有更改
@Before
public void before() {
Runtime.getRuntime().gc();
Runtime.getRuntime().freeMemory();
}
@After
public void cleanup() {
Runtime.getRuntime().gc();
}
@Test
public void runQueens1() {
BinaryCSPReader reader = new BinaryCSPReader();
URL file = this.getClass().getResource("4Queens.csp");
System.out.println("\nProblem : 4Queens.csp");
try {
BinaryCSP csp = reader.readBinaryCSP(file.getPath());
MAC3 mac3 = new MAC3();
Assignment assignment = mac3.solve(csp, new QueensPrinter());
if (assignment != null) {
assignment.print();
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void runQueens2() {
BinaryCSPReader reader = new BinaryCSPReader();
URL file = this.getClass().getResource("6Queens.csp");
System.out.println("\nProblem : 6Queens.csp");
try {
BinaryCSP csp = reader.readBinaryCSP(file.getPath());
MAC3 mac3 = new MAC3();
Assignment assignment = mac3.solve(csp, new QueensPrinter());
if (assignment != null) {
assignment.print();
}
Runtime.getRuntime().gc();
} catch (IOException e) {
e.printStackTrace();
}
}