2011-09-07 181 views
8

我正在尝试使用Arquillian进行一些单元测试,但是我无法找到使用Maven进行部署时失败的原因。无法运行arquillian测试

这是类测试:

package com.ndeveloper.spec.test; 

import javax.inject.Inject; 

import junit.framework.Assert; 

import org.jboss.arquillian.container.test.api.Deployment; 
import org.jboss.arquillian.junit.Arquillian; 
import org.jboss.shrinkwrap.api.ArchivePaths; 
import org.jboss.shrinkwrap.api.ShrinkWrap; 
import org.jboss.shrinkwrap.api.asset.ByteArrayAsset; 
import org.jboss.shrinkwrap.api.spec.JavaArchive; 
import org.junit.Test; 
import org.junit.runner.RunWith; 

import com.ndeveloper.spec.controller.GreetingBean; 

@RunWith(Arquillian.class) 
public class GreetingBeanTest { 

@Inject 
GreetingBean greetingBean; 

@Deployment 
public static JavaArchive createTestArchive() 
{ 
    return ShrinkWrap.create(JavaArchive.class,"test.jar"). 
      addClass(GreetingBean.class).addAsManifestResource(
        new ByteArrayAsset("<beans/>".getBytes()), 
        ArchivePaths.create("beans.xml")); 

} 

@Test 
public void testInjection(){ 
    Assert.assertEquals("Hello World", greetingBean.getGreeting());  
} 
} 

而且我使用JBoss的jboss-javaee6-webapp的原型。奇怪的是,最初的测试工作正常......但使用了几次后。下面的错误开始出现:

测试错误: com.ndeveloper.spec.test.GreetingBeanTest:无法获得MBeanServerConnect到:服务:JMX:RMI:/// JNDI/RMI://127.0.0.1 :1090/jmxrmi

万无一失报告说以下内容:

------------------------------------------------------------------------------- 
Test set: com.ndeveloper.spec.test.GreetingBeanTest 
------------------------------------------------------------------------------- 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.309 sec <<< FAILURE! 
com.ndeveloper.spec.test.GreetingBeanTest Time elapsed: 0 sec <<< ERROR! 
java.lang.IllegalStateException: Cannot obtain MBeanServerConnection to: service:jmx:rmi:///jndi/rmi://127.0.0.1:1090/jmxrmi 
at org.jboss.as.arquillian.container.MBeanServerConnectionProvider.getConnection(MBeanServerConnectionProvider.java:64) 
at org.jboss.as.arquillian.container.remote.RemoteDeployableContainer.getMBeanServerConnection(RemoteDeployableContainer.java:66) 
at org.jboss.as.arquillian.container.remote.RemoteDeployableContainer.startInternal(RemoteDeployableContainer.java:52) 
at org.jboss.as.arquillian.container.CommonDeployableContainer.start(CommonDeployableContainer.java:88) 
at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController$5.perform(ContainerLifecycleController.java:144) 
at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController$5.perform(ContainerLifecycleController.java:134) 
at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController.forContainer(ContainerLifecycleController.java:182) 
at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController.startContainer(ContainerLifecycleController.java:133) 
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 org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90) 
at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81) 
at org.jboss.arquillian.container.impl.client.ContainerDeploymentContextHandler.createContainerContext(ContainerDeploymentContextHandler.java:57) 
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 org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:134) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:114) 
at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67) 
at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController$2.perform(ContainerLifecycleController.java:83) 
at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController$2.perform(ContainerLifecycleController.java:76) 
at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController.forEachContainer(ContainerLifecycleController.java:175) 
at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController.startContainers(ContainerLifecycleController.java:75) 
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 org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90) 
at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:134) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:114) 
at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67) 
at org.jboss.arquillian.container.test.impl.client.ContainerEventController.execute(ContainerEventController.java:83) 
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 org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90) 
at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81) 
at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:54) 
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 org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:134) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:114) 
at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.beforeSuite(EventTestRunnerAdaptor.java:68) 
at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:76) 
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35) 
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:115) 
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97) 
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 org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103) 
at $Proxy0.invoke(Unknown Source) 
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150) 
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:91) 
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69) 
    Caused by: java.io.IOException: Failed to retrieve RMIServer stub:        javax.naming.ServiceUnavailableException [Root exception is    java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
java.net.ConnectException: Connection refused: connect] 
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:338) 
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248) 
at org.jboss.as.arquillian.container.MBeanServerConnectionProvider.getConnection(MBeanServerConnectionProvider.java:60) 
... 69 more 
    Caused by: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
java.net.ConnectException: Connection refused: connect] 
at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:101) 
at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:185) 
at javax.naming.InitialContext.lookup(InitialContext.java:392) 
at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1886) 
at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1856) 
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:257) 
... 71 more 
    Caused by: java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
java.net.ConnectException: Connection refused: connect 
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601) 
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198) 
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184) 
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322) 
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) 
at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:97) 
... 76 more 
    Caused by: java.net.ConnectException: Connection refused: connect 
at java.net.PlainSocketImpl.socketConnect(Native Method) 
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) 
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
at java.net.Socket.connect(Socket.java:529) 
at java.net.Socket.connect(Socket.java:478) 
at java.net.Socket.<init>(Socket.java:375) 
at java.net.Socket.<init>(Socket.java:189) 
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22) 
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128) 
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595) 
... 81 more 

最后我arquillian.xml配置是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<arquillian xmlns="http://jboss.org/schema/arquillian" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://jboss.org/schema/arquillian 
    http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> 

<!-- Uncomment to have test archives exported to the file system for inspection --> 
<!-- <engine> --> 
<!--  <property name="deploymentExportPath">target/</property> --> 
<!-- </engine> --> 

<!-- Example configuration for a remote JBoss AS 7 instance --> 
<container qualifier="jboss" default="true"> 
    <protocol type="jmx-as7"> 
    <property name="executionType">REMOTE</property> 
    </protocol> 
    <configuration> 
    <property name="jbossHome">D:\JavaWindows\servers\jboss-as-web-7.0.1.Final\jboss-as-web-7.0.1.Final</property> 
    </configuration> 
</container> 

但是我不明白为什么arqullian停止运行测试。正如我之前告诉过你的,但是在设置改变后,他们曾经工作过? Idk ....这个错误开始出现。

公正的情况下进行了测试使用以下命令运行: MVN清洁测试-Parq-jbossas远程

非常感谢。

回答

3

在arquillian.xml属性jbossHome应为:

d:\ JavaWindows \服务器\ jboss-as-web-7.0.1.Final \的JBoss-AS-web的7.0.1。最终

你应该添加两个斜杠而不是一个斜杠。

您应该验证在执行测试之前,您的jboss是否正在运行。这是因为你配置为REMOTE。

1

取决于容器的类型,即JBoss 7托管或远程,您需要正确设置某些配置,才能使Arquillian连接到JBoss服务器。

在托管服务器的情况下,您需要告诉Arquillian在哪里可以找到JBoss。这可以通过设置JBOSS_HOME为系统属性来完成,或添加“jbossHome”配置到arquillian.xml

在远程JBoss容器的情况下,需要的Arquillian 2个额外的参数: managementAddress managementPort,

的Arquillian使用默认127.0.0.1:9999。如果您的服务器运行在不同的主机/端口上,则应该在arquillian中配置2个参数。XML

在下面的链接,你会找到的Arquillian测试sevreal运行实例与JBoss 7或JBoss的5:

http://milestonenext.blogspot.de/2012/12/ejb3-integration-test-with-arquillian.html