我开始使用的Arquillian以下the general getting started guide我可以成功复制,但using it for EJB testing由于失败Unable to inject resource - most probably incorrect InjectionServices SPI implementation
这将导致@EJB
财产不被注射/ null
可以因此测试失败。@EJB注入失败,因为“无法注入资源 - 最有可能不正确InjectionServices SPI实现”
的招待员例子的扩展演示了这个问题:
@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 + "!";
}
}
和测试:
@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");
}
}
失败,因为
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)
最好的,但不可用的提示会被
- @EJB injection with Arquillian on WebLogic 10.3.5 doesn't work交付(包括死链接,它menitons
WebArchive
而官方指南对SE和EE一个JarArchive
,所以我想JarArchive
是正确的) - Dependency injection does not work in Arquillian Test涵盖注射失败,但它是由档案中丢失的类别引起的,这不是我的情况
- Injecting @Stateless EJB in Arquillian tests是关于失败
Unsatisfied dependencies for type [MyEjbRemote] with qualifiers [@Default] at injection point [[field] @Inject private com.org.app.ejb.InjectionTest.ejb]
,我也得到了一点,但不记得在什么时候,在这个大流unhelp FUL非解释失败消息
MCVEs被https://github.com/krichter722/arquillian-demo(这是应该的工作基础上引导扩展Java SE项目)和https://github.com/krichter722/arquillian-demo-2(我自己的Java EE项目)
我使用的Arquillian 1.1.13 。最后。
正如我所看到的,测试使用焊接本身,而不是EJB容器,所以“@EJB @Resource,@Transact” ...不起作用。如果为测试开始一个野蝇需要付出很大的努力,那么在测试环境中可以使用扩展来模拟EJB,或许cdi-unit和ejb-cdi-unit可以提供帮助。有关更多文档,请参阅github。 – aschoerk