我開始使用的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