【发布时间】:2012-06-20 12:16:28
【问题描述】:
当我在使用 H2 数据库的 NetBeans 中运行或调试单元测试时,我收到 StackOverflowError:
...
Caused by: java.lang.StackOverflowError
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.h2.command.Command.executeUpdate(Command.java:230)
at org.h2.command.CommandList.update(CommandList.java:44)
at org.h2.command.CommandList.executeRemaining(CommandList.java:39)
at org.h2.command.CommandList.update(CommandList.java:45)
at org.h2.command.CommandList.executeRemaining(CommandList.java:39)
at org.h2.command.CommandList.update(CommandList.java:45)
at org.h2.command.CommandList.executeRemaining(CommandList.java:39)
at org.h2.command.CommandList.update(CommandList.java:45)
at org.h2.command.CommandList.executeRemaining(CommandList.java:39)
at org.h2.command.CommandList.update(CommandList.java:45)
at org.h2.command.CommandList.executeRemaining(CommandList.java:39)
at org.h2.command.CommandList.update(CommandList.java:45)
at org.h2.command.CommandList.executeRemaining(CommandList.java:39)
at org.h2.command.CommandList.update(CommandList.java:45)
at org.h2.command.CommandList.executeRemaining(CommandList.java:39)
...等
当我从 ant 运行完整的单元测试时,我没有问题。从 IntelliJ 运行单个单元测试也可以正常工作。
感谢您的帮助。请不要回答“切换到 IntelliJ”之类的问题,我想继续使用我最喜欢的 IDE。
【问题讨论】:
-
您是否有机会使用两个不同的 VM 在 NetBeans、命令行和 IntelliJ IDE 中运行测试?
-
嗯,你知道这是什么SQL语句吗?也许这是一个非常非常长的。要找出答案,您可以将
;TRACE_LEVEL_FILE=3附加到数据库 URL 并在dbName.trace.db文件中查看。 -
声明很长,但为什么在 NetBeans 中会出现这样的问题?
-
可能是因为 NetBeans 中的默认堆栈大小较小。语句到底有多长(以字符和子语句的数量计)?
标签: java database unit-testing junit h2