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
- @EJB injection with Arquillian on WebLogic 10.3.5 doesn't work (contient des liens morts et menitons
WebArchive
alors que le guide officiel utilise unJarArchive
pour les SE et EE, donc je suppose queJarArchive
est correct) - Dependency injection does not work in Arquillian Test couvre l'échec d'injection, mais il est causes par des classes manquantes dans l'archive ce qui n'est pas le cas pour moi
- Injecting @Stateless EJB in Arquillian tests est à propos de l'échec que j'ai aussi obtenu à un moment donné, mais ne me souviens pas quand, dans ce grand flux de ne pas aider Ful messages d'échec non expliquant
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.
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