2017-06-29 3 views
0

Ich versuche, eine wirklich einfache Arquillian Test gegen einen entfernten Weblogic 12.1.x zu tun, so zum Beispiel habe ich die folgendeArquillian org.junit.runner.Runner NoClassDefFoundError wenn JMockit auf Classpath

public class MyBean { 

} 

Und dann die Test

@RunWith(Arquillian.class) 
public class InjectionTest { 

    @Deployment 
    public static JavaArchive createDeployment() { 
     return ShrinkWrap.create(JavaArchive.class, "lib.jar") 
      .addClass(MyBean.class) 
      .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml") 
    } 

    @Inject 
    MyBean bean; 

    @Test 
    public void test_bean_not_null() { 
     Assert.assertNotNull(bean); 
    } 

} 

Einfach genug! Allerdings erhalte ich die folgende Stack-Trace

java.lang.NoClassDefFoundError: org.junit.runner.Runner 
       at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:61) 
       at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33) 
       at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:36) 
       at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 
       at org.jboss.arquillian.junit.container.JUnitTestRunner.execute(JUnitTestRunner.java:66) 
       at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.executeTest(ServletTestRunner.java:170) 
       at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.execute(ServletTestRunner.java:135) 
       at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.doGet(ServletTestRunner.java:98) 
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
       at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286) 
       at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260) 
       at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137) 
       at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350) 
       at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25) 
       at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) 
       at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:32) 
       at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) 
       at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3683) 
       at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3649) 
       at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326) 
       at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197) 
       at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203) 
       at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71) 
       at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2433) 
       at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2281) 
       at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2259) 
       at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1691) 
       at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1651) 
       at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270) 
       at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348) 
       at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333) 
       at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54) 
       at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41) 
       at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640) 
       at weblogic.work.ExecuteThread.execute(ExecuteThread.java:406) 
       at weblogic.work.ExecuteThread.run(ExecuteThread.java:346) 

Und hier ist der entsprechende Abschnitt meines pom, ich bin nicht sicher, was mit ihm los ist

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.jboss.arquillian</groupId> 
      <artifactId>arquillian-bom</artifactId> 
      <version>1.1.13.Final</version> 
      <scope>import</scope> 
      <type>pom</type> 
     </dependency> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>7.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.12</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
<dependencies> 
    <dependency> 
     <groupId>org.jmockit</groupId> 
     <artifactId>jmockit</artifactId> 
     <version>1.18</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.arquillian.junit</groupId> 
     <artifactId>arquillian-junit-container</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.arquillian.extension</groupId> 
     <artifactId>arquillian-persistence-dbunit</artifactId> 
     <version>1.0.0.Alpha7</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.arquillian.protocol</groupId> 
     <artifactId>arquillian-protocol-servlet</artifactId> 
     <version>1.1.11.Final</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.arquillian.container</groupId> 
     <artifactId>arquillian-wls-remote-12.1.x</artifactId> 
     <version>1.0.1.Final</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
    </dependency> 
</dependencies> 

EDIT: Wenn ich entfernen Abhängigkeiten JMockit Liste, es funktioniert! Ich brauche jedoch JMockit für meine Unit Tests.

+0

Sie müssen möglicherweise eine neuere Version von JMockit als 1.18 verwenden - einige Arbeiten wurden vor kurzem für das Laden von benutzerdefinierten Klassen in JMockit ausgeführt (getestet mit Arquillian auf JBoss Wildfly 10.0). Aus Neugier, was brauchen Sie Arquillian für das JMockit selbst kann nicht mit '@Tested (FullyInitialized = True)'? Ich habe dies in der Vergangenheit genutzt, um eine Java EE 7-Webanwendung zu testen, die JPA + JSF + EJB verwendet. –

+0

Ich habe versucht, mit 1.33 mit der oben genannten Abhängigkeitsreihenfolge und hatte das gleiche Problem. Im Moment experimentiere ich nur. – PDStat

Antwort

0

Ok, so offenbar die Reihenfolge der Test Abhängigkeiten Angelegenheiten, müssen wir die Arquillian junit Container und junit selbst VOR JMockit

<dependency> 
    <groupId>org.jboss.arquillian.junit</groupId> 
    <artifactId>arquillian-junit-container</artifactId> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.jmockit</groupId> 
    <artifactId>jmockit</artifactId> 
    <version>1.18</version> 
    <scope>test</scope> 
</dependency> 
+0

Bedeutet dies, dass jmockit eine eigene, ältere Version von JUnitas transitive Abhängigkeit hat? Was sagt 'mvn dependency: tree' für beide Varianten? –

0

Sind Sie eingebettete Container oder verwaltete/remote ein mit? Beachten Sie, dass Sie bei Verwendung von managed oder remote die Bibliothek in der Installationsumgebung hinzufügen müssen

+0

Dies sollte ein * Kommentar * zu der Frage sein ... –

Verwandte Themen