每次Junit测试后如何清除调用堆栈

时间:2019-04-01 13:11:20

标签: java recursion

我有多个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();
    }

}

0 个答案:

没有答案
相关问题