2017-06-29 2 views
0

Je cherche à faire un test très simple Arquillian contre un 12.1.x Weblogic à distance ainsi par exemple que je donne les résultats suivantsArquillian org.junit.runner.Runner NoClassDefFoundError quand JMockit sur classpath

public class MyBean { 

} 

Et puis la 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); 
    } 

} 

Assez simple! Cependant, je reçois la trace de la pile suivante

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) 

Et voici la section pertinente de mon pom, je ne sais pas ce qui ne va pas avec elle

<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: Si je supprime JMockit des dépendances liste, ça marche! J'ai cependant besoin de JMockit pour mes tests unitaires.

+0

Vous pourriez avoir besoin d'utiliser une version plus récente de JMockit que 1.18 - un travail a été fait il y a peu de temps pour le support de chargement de classes personnalisées dans JMockit (testé avec Arquillian sur JBoss Wildfly 10.0). Par curiosité, cependant, qu'avez-vous besoin d'Arquillian pour que JMockit lui-même ne puisse pas faire avec '@Tested (fullyInitialized = true)'? J'ai utilisé ceci dans le passé pour tester l'intégration d'une application web Java EE 7 qui utilisait JPA + JSF + EJB. –

+0

J'ai essayé avec 1.33 en utilisant l'ordre de dépendance ci-dessus et j'ai eu le même problème. En ce moment je suis en train d'expérimenter. – PDStat

Répondre

0

Ok, donc apparemment l'ordre du test des dépendances questions, nous avons besoin du conteneur Arquillian JUnit et JUnit lui-même avant 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

Cela signifie-t-il que jmockit a sa propre version plus ancienne de la dépendance transitive JUnitas? Qu'est-ce que 'mvn dependency: tree' dit pour les deux variantes? –

0

Utilisez-vous un conteneur intégré ou géré/à distance? Notez que si vous utilisez managed or remote vous devez ajouter la librairie dans le jar de déploiement

+0

Cela devrait être un * commentaire * à la question ... –