Я пытаюсь проверить сценарий после замены hte default по умолчанию своим собственным PrintStream.
ScriptingContainer container = new ScriptingContainer();
container.setOut( my new output target printstream);
container.runScriptlet("puts \"*value*\"";);
Расточная оболочка Stacktrace
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.jruby.exceptions.RaiseException: (Errno::EBADF) Bad file descriptor
org.jruby.embed.EvalFailedException: (Errno::EBADF) Bad file descriptor
at org.jruby.embed.internal.EmbedEvalUnitImpl.run(EmbedEvalUnitImpl.java:127)
at org.jruby.embed.ScriptingContainer.runUnit(ScriptingContainer.java:1231)
at org.jruby.embed.ScriptingContainer.runScriptlet(ScriptingContainer.java:1224)
... my boring test case stuff
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
Интересное завернутое исключение
org.jruby.exceptions.RaiseException: (Errno::EBADF) Bad file descriptor
at org.jruby.RubyIO.write(org/jruby/RubyIO.java:1319)
at org.jruby.RubyIO.write(org/jruby/RubyIO.java:2297)
at org.jruby.RubyIO.puts(org/jruby/RubyIO.java:2252)
at org.jruby.RubyKernel.puts(org/jruby/RubyKernel.java:522)
at #<Class:0x101e4f266>.(root)(<script>:1)
Обратите внимание, что мой PrintStream просто печатает в StringBuilder, который я затем утверждаю в тесте.PrintStream.checkError () всегда возвращает false и, если он присоединяется к StringBuilder, он никогда не завершается с ошибкой.
Каждый тест выполняет очистку, выполняя следующие действия для ScriptingContainer.Я добавил вызовы resetXXX, просто чтобы быть приятным, и проблема сохраняется с ними или без них.
final ScriptingContainer container = ...
container.resetWriter();
container.resetErrorWriter();
container.terminate();
Обновление Может показаться, что при запуске теста в одиночку все работает, но при запуске тестас путами за другим не получается, потому что что-то прикручено.Странная вещь - почему это ввернуто, учитывая, что я перезагружаю писателей и завершаю контейнер.Есть ли что-то еще, что мне нужно убить, когда я срываю Джруби между тестами?