【问题标题】:How do I cause/force a StackOverflowError for testing如何导致/强制 StackOverflowError 进行测试
【发布时间】:2013-09-20 22:40:50
【问题描述】:

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

【问题讨论】:

  • throw new StackOverflowError()?你为什么还要测试那个案例?这样的错误通常意味着你犯了一个基本的编程错误。
  • 在某些情况下,子服务器可以合法地耗尽内存,我想确保错误被​​正确传递给处理程序。
  • @MattBall 我认为在某些特殊情况下,堆栈对于一些递归来说太小了,所以即使是编程良好的递归也会失败。无论如何,这是一个罕见的情况

标签: java testing error-handling integration-testing stack-overflow


【解决方案1】:

你可以使用无限递归:

public void recursiveMethod() {
    recursiveMethod();
}

这将导致StackOverflowError,因为堆栈不断被填满并且永远不会被清空。

IDEOne demo

【讨论】:

  • 我考虑过这样的事情,这会被认为是“干净的”
  • @rsavchenko 是的,这是获得堆栈溢出错误的最简单方法。
  • 抛出 StackOverflowError 的最简单方法是throw new StackOverflowError()。最干净的方法是调用没有退出条件的递归方法,如上述答案。
  • @Brandon 我们说的是 real StackOverflowError, throw new StackOverflowError() 不是真正的堆栈溢出。事实上,OP 是在谈论诱导 SOE,而不是解雇它。
  • 我明白了。我试图澄清什么是“干净”的方法与“简单”的方法。
【解决方案2】:
public class T {
    public static void main(String args[]) {
        throw new StackOverflowError();
    }
}

【讨论】:

  • 这只是验证是否捕获了异常,而不是应用程序可以从真正的 StackOverflow 中恢复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-02
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多