Java 如何导致/强制堆栈溢出错误进行测试

Java 如何导致/强制堆栈溢出错误进行测试,java,testing,error-handling,integration-testing,stack-overflow,Java,Testing,Error Handling,Integration Testing,Stack Overflow,我想测试我的服务器,以确保我正在冒泡并正确处理一些特定的错误(我所说的处理是指清理和关闭)。引发堆栈溢出错误的最佳/正确方法是什么,有没有标准的方法来实现这一点,或者这只是一个丑陋的坏主意。这是我想测试的东西。您可以使用无休止的递归: public void recursiveMethod() { recursiveMethod(); } 这将导致堆栈溢出错误,因为堆栈会不断被填满,并且从不清空 抛出新的StackOverflowerError()?你为什么还要测试那个案子?这样的错误

我想测试我的服务器,以确保我正在冒泡并正确处理一些特定的错误(我所说的处理是指清理和关闭)。引发堆栈溢出错误的最佳/正确方法是什么,有没有标准的方法来实现这一点,或者这只是一个丑陋的坏主意。这是我想测试的东西。

您可以使用无休止的递归:

public void recursiveMethod() {
    recursiveMethod();
}
这将导致堆栈溢出错误,因为堆栈会不断被填满,并且从不清空


抛出新的StackOverflowerError()
?你为什么还要测试那个案子?这样的错误通常意味着你犯了一个基本的编程错误。在某些情况下,子服务器可能会合法地耗尽内存,我想确保错误正确地传递给处理程序。@MattBall我认为可能存在某些特殊情况,堆栈太小,无法进行一些递归,因此,即使是一个经过良好编程的递归也会失败。无论如何,这是一个罕见的案例,它只会验证异常是否被捕获,而不是应用程序是否可以从真正的StackOverflow中恢复。我考虑过类似的情况,这是否会被视为“干净”@rsavchenko是的,这是获取堆栈溢出错误的最简单方法。抛出StackOverflowerError的最简单方法是
抛出新的StackOverflowerError()
。最干净的方法是调用一个递归方法,该方法没有上述答案那样的退出条件。@Brandon我们说的是real
StackOverflowerError
throw new StackOverflower()
不是真正的堆栈溢出。事实上,OP谈论的是诱导一家国有企业,而不是解雇它。我理解。我试图澄清什么是“干净”方法与“简单”方法。
public class T {
    public static void main(String args[]) {
        throw new StackOverflowError();
    }
}