【问题标题】:Pax Exam 2.6.0 + Karaf 2.3.0 - Debugging in Eclipse fails - NotBoundExceptionPax Exam 2.6.0 + Karaf 2.3.0 - 在 Eclipse 中调试失败 - NotBoundException
【发布时间】:2013-01-30 10:16:33
【问题描述】:

我一直在使用 Pax Exam 2.6.0 通过 Karaf Exam Container 在 Apache Karaf 2.3.0 上运行集成测试。

一切都按预期工作,除了来自 Eclipse 的集成测试的本地调试(不是远程)。 我在这里找到了一个建议的解决方案: http://team.ops4j.org/wiki/display/paxexam/FAQ#FAQ-WhydoestheJavadebuggernotstopatabreakpointIsetinmyPaxExamJUnittest%3F

在使用 Pax Runner 容器时,您需要处理两个 Java VM 进程,一个运行测试驱动程序,一个运行测试驱动程序 OSGi 框架。你的 JUnit 类的执行流程实际上是 在两个 VM 之间拆分,您的测试方法的主体是 在远程 VM 上执行。

因此,您需要使用 @Configuration 方法中的 vmOption(),例如

vmOption("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"), 系统超时(0)

不幸的是,这不起作用,当我尝试在调试模式下从 Eclipse 启动 JUnit 测试时,我不断收到每个运行的 @Test - 带注释的方法的这些错误:

java.rmi.NotBoundException: c59ea59a-f771-47fe-aac8-aa7f5c72b17d
    at sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:136)
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:409)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)
    at sun.rmi.transport.Transport$1.run(Transport.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at org.ops4j.pax.exam.rbc.client.intern.RemoteBundleContextClientImpl.getRemoteBundleContext(RemoteBundleContextClientImpl.java:263)
    at org.ops4j.pax.exam.rbc.client.intern.RemoteBundleContextClientImpl.waitForState(RemoteBundleContextClientImpl.java:234)
    at org.apache.karaf.tooling.exam.container.internal.KarafTestContainer.waitForState(KarafTestContainer.java:599)
    at org.apache.karaf.tooling.exam.container.internal.KarafTestContainer.start(KarafTestContainer.java:183)
    at org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactor.invoke(AllConfinedStagedReactor.java:67)
    at org.ops4j.pax.exam.junit.JUnit4TestRunner$2.evaluate(JUnit4TestRunner.java:285)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.ops4j.pax.exam.junit.JUnit4TestRunner.run(JUnit4TestRunner.java:94)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

控制台视图中显示的唯一内容是以下行:

在地址:5005 监听传输 dt_socket

我的系统详情如下:

  • 操作系统:Windows 7 64 位
  • Java 版本:Oracle Java 7 Update 9 64bit
  • Pax 考试版本:2.6.0
  • IDE:Eclipse 4.2

这个问题每次都会发生。

作为结论:我的目标是能够在调试模式下直接从 Eclipse IDE 运行 jUnit 集成测试。 有人有建议吗?

谢谢!

【问题讨论】:

    标签: eclipse debugging integration-testing apache-karaf pax-exam


    【解决方案1】:

    在你的 Option [] cfg 中添加这个。

    KarafDistributionOption.debugConfiguration("8889", true)

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 2016-02-28
      • 1970-01-01
      • 2013-11-19
      • 2021-07-08
      • 1970-01-01
      • 2016-05-19
      • 2018-12-22
      • 1970-01-01
      相关资源
      最近更新 更多