2017-06-20 3 views
0

Je suis en train commencé avec Arquillian suivant the general getting started guide que je peux reproduire avec succès, mais using it for EJB testing échoue en raison d'Unable to inject resource - most probably incorrect InjectionServices SPI implementation qui provoque la propriété @EJB ne pas être injecté/null peut donc faire échouer le test.injection @EJB dans Arquillian échoue à cause de « Impossible d'injecter des ressources - très probablement InjectionServices incorrectes SPI mise en œuvre »

Une extension de l'exemple greeter démontre la question:

@Local 
public interface GreeterIface { 

    void greet(PrintStream to, String name); 

    String createGreeting(String name); 
} 

EJB:

@Stateless 
public class Greeter implements GreeterIface{ 
    @Override 
    public void greet(PrintStream to, String name) { 
     to.println(createGreeting(name)); 
    } 

    @Override 
    public String createGreeting(String name) { 
     return "Hello, " + name + "!"; 
    } 
} 

et le test:

@RunWith(Arquillian.class) 
public class GreeterTest { 

    @Deployment 
    public static JavaArchive createDeployment() { 
     return ShrinkWrap.create(JavaArchive.class) 
      .addClasses(Greeter.class, GreeterIface.class) 
      .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); 
    } 

    @EJB 
    private Greeter greeter; 

    @Test 
    public void should_create_greeting() { 
     Assert.assertEquals("Hello, Earthling!", 
      greeter.createGreeting("Earthling")); 
     greeter.greet(System.out, "Earthling"); 
    } 
} 

échoue en raison d'

Jun 20, 2017 3:03:19 PM org.jboss.weld.injection.AbstractResourceInjection getResourceReference 
WARN: WELD-000834: Unable to inject resource - most probably incorrect InjectionServices SPI implementation: private richtercloud.arquillian.demo.Greeter richtercloud.arquillian.demo.GreeterTest.greeter 
    at richtercloud.arquillian.demo.GreeterTest.greeter(GreeterTest.java:0) 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.012 sec <<< FAILURE! - in richtercloud.arquillian.demo.GreeterTest 
should_create_greeting(richtercloud.arquillian.demo.GreeterTest) Time elapsed: 0.035 sec <<< ERROR! 
java.lang.NullPointerException: null 
    at richtercloud.arquillian.demo.GreeterTest.should_create_greeting(GreeterTest.java:33) 

Le meilleur, mais des notes inutilisables sont livrés par

MCVEs sont https://github.com/krichter722/arquillian-demo (étendu projet Java SE qui est censé travailler en fonction de guide) et https://github.com/krichter722/arquillian-demo-2 (mon propre projet Java EE)

J'utilise Arquillian 1.1.13 .Final.

+0

Comme je peux le voir, les tests utilisent la soudure-soi, pas un ejb-conteneur, de sorte que « @EJB @Resource, @Transact » ... ne fonctionnera pas. Si le démarrage d'un wildfly pour les tests est beaucoup d'effort, il y a des extensions qui sont faites pour faire une simulation d'EJB dans un environnement de test peut-être que cdi-unit et ejb-cdi-unit peuvent aider. Voir github, pour plus de documentation. – aschoerk

Répondre

0

Comment ressemble votre fichier pom.xml? Vous devez ajouter des informations supplémentaires pour qu'Arquillian puisse démarrer un conteneur et lancer les tests. Dans le guide "Mise en route", ils exécutent une application CDI uniquement et utilisent la soudure comme implémentation pour gérer l'injection des beans nécessaires. Mais dans votre cas, vous voulez tester l'injection d'un haricot sans état. Dans ce cas, vous devez ajouter un conteneur comme jboss/wildfly ou glassfish pour effectuer les tests.

Ce guide Arquillian montre comment utiliser @EJB dans un test Arquillian: Getting Started: Rinse and Repeat

Dans le guide JBoss AS 7 est utilisé. Si vous souhaitez utiliser wildfly 10 à la place, vous pouvez utiliser la dépendance suivante:

<dependency> 
    <groupId>org.wildfly.arquillian</groupId> 
    <artifactId>wildfly-arquillian-container-remote</artifactId> 
    <version>2.1.0.Alpha3</version> 
</dependency>