2016-01-05 4 views
1

У меня есть еще один, не работающий Arquillian тест:ArquillianServletRunner не найдено

@RunWith(Arquillian.class) 
public class SomeTest { 

private static final String APPLICATION_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
     + "<application xmlns=\"http://java.sun.com/xml/ns/javaee\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd\" version=\"6\">" 
     + "<display-name>org.acme.project</display-name></application>"; 

@Deployment 
public static Archive<?> createDeployment() { 
    EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class); 
    ear.setApplicationXML(new StringAsset(APPLICATION_XML)); 
    ear.addAsModules(Testable.archiveToTest(ShrinkWrap.create(WebArchive.class))); 
    return ear; 
} 

@Test 
@Transactional 
public void test() throws Exception { 
    System.out.println("SomeTest.test()"); 
} 

} 

Этот класс все, что нужно для следующего исключения:

java.lang.IllegalArgumentException: ArquillianServletRunner not found. Could not determine ContextRoot from ProtocolMetadata, please contact DeployableContainer developer. 
at org.jboss.arquillian.protocol.servlet.ServletUtil.determineBaseURI(ServletUtil.java:64) 
at org.jboss.arquillian.protocol.servlet.ServletURIHandler.locateTestServlet(ServletURIHandler.java:60) 
at org.jboss.arquillian.protocol.servlet.ServletMethodExecutor.invoke(ServletMethodExecutor.java:84) 
at org.jboss.arquillian.container.test.impl.execution.RemoteTestExecuter.execute(RemoteTestExecuter.java:109) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
.... 

Я видел другие вопросы вокруг (например, this one), но все они, кажется, используют Glassfish, тогда как я использую управляемую Wildfly 8.1.

Тем не менее, поскольку slf4j пробрался в мой список зависимостей, я пробовал разные версии (1.5.10, 1.6.6, 1.7.13).

Как всегда, в журнале сервера (или в любом месте) нет признаков того, что что-то пошло не так, только жалобщик JUnit (Eclipse и Maven) жалуется. Тесты с другими развертываниями выполняются отлично.

Что случилось?

+0

Это сообщение указывает на то, что во время развертывания произошла ошибка, которая не имеет никакого отношения к сообщению. Я отправил ответ на указанный вопрос: https://stackoverflow.com/questions/13750005/arquillian-adding-beans-xml-causes-arquillianservletrunner-not-found/46615704#46615704 –

ответ

3

Для всех с одинаковой проблемой. Вот как это работает (см. Комментарии к изменениям):

private static final String APPLICATION_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
     + "<application xmlns=\"http://java.sun.com/xml/ns/javaee\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd\" version=\"6\">"   + "<display-name>org.acme.project</display-name>" 
     // the WAR must be added to the application.xml ! 
     + "<module><web><web-uri>test.war</web-uri><context-root>/test</context-root></web></module>" 
     + "</application>"; 

@Deployment 
public static Archive<?> createDeployment() { 
    EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class); 
    ear.setApplicationXML(new StringAsset(APPLICATION_XML)); 

    // to add the WAR to the application.xml, it must have a name 
    WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war"); 
    // the test class must be added manually for whatever reason 
    webArchive.addClass(SomeTest.class); 
    ear.addAsModules(Testable.archiveToTest(webArchive)); 
    return ear; 
}