2011-09-07 33 views
8

Tôi đang cố gắng sử dụng Arquillian cho một số kiểm tra đơn vị, tuy nhiên tôi không thể tìm thấy lý do tại sao chúng không thành công khi triển khai bằng Maven.Không thể chạy thử nghiệm arquillian

Đây là thử nghiệm lớp:

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());  
} 
} 

Và Tôi đang sử dụng nguyên mẫu JBoss JBoss-javaee6-webapp. Điều kỳ lạ là ban đầu thử nghiệm hoạt động tốt ... Tuy nhiên sau khi sử dụng nhiều lần chúng. Các lỗi sau đây bắt đầu xuất hiện:

thử nghiệm do lỗi: com.ndeveloper.spec.test.GreetingBeanTest: Không thể lấy được MBeanServerConnect đến: dịch vụ: jmx: rmi: /// jndi/rmi: //127.0.0.1 : 1090/jmxrmi

báo cáo chắc chắn thành nói như sau:

------------------------------------------------------------------------------- 
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 

Và cuối cùng arquillian.xml của tôi được cấu hình như thế này:

<?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> 

Tuy nhiên tôi không thể hiểu tại sao arqullian ngừng chạy thử nghiệm. Như tôi đã nói với bạn trước đây, họ đã từng làm việc sau khi cài đặt thay đổi? Idk .... lỗi này bắt đầu xuất hiện.

Chỉ trong trường hợp các thử nghiệm đã chạy với lệnh sau: mvn kiểm tra sạch -Parq-jbossas-xa

Thanks a lot.

Trả lời

3

Thuộc tính jbossHome trong arquillian.xml nên càng:

D: \ JavaWindows \ server \ jboss-as-web-7.0.1.Final \ JBoss-as-web-7.0.1. Final

Bạn nên thêm hai dấu gạch chéo thay vì một dấu gạch chéo.

Bạn phải xác minh xem jboss của bạn là 7 đang chạy trước khi thực hiện kiểm tra. Điều này là do bạn đã định cấu hình là REMOTE.

1

Phụ thuộc vào loại vùng chứa, tức là JBoss 7 được quản lý hoặc điều khiển từ xa, bạn cần có một số cấu hình được thiết lập chính xác, để làm cho Arquillian kết nối với máy chủ JBoss.

Trong trường hợp máy chủ được quản lý, bạn cần báo cho Arquillian biết nơi tìm JBoss. Điều này có thể được thực hiện bằng cách thiết lập JBOSS_HOME như thuộc tính hệ thống, hoặc thêm "jbossHome" cấu hình để arquillian.xml

Trong trường hợp của container JBoss từ xa, Arquillian cần 2 thông số bổ sung: managementAddress managementPort,

Arquillian sử dụng mặc định 127.0.0.1:9999. Nếu máy chủ của bạn đang chạy trên máy chủ/cổng khác nhau, thì 2 thông số phải được định cấu hình trong arquillian.xml

Theo sau liên kết mà bạn sẽ tìm thấy ví dụ chạy sevreal cho Arquillian Thử nghiệm với JBoss 7 hoặc JBoss 5:

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

Các vấn đề liên quan