Я начинаю работу с Arquillian, следуя общему руководству по началу работы, которое я могу успешно воспроизвести, но < href="http://arquillian.org/guides/getting_started_rinse_and_repeat/" rel="nofollow noreferrer">использование его для тестирования EJB не удается из-за Unable to inject resource - most probably incorrect InjectionServices SPI implementation
, что приводит к тому, что свойство @EJB
не внедряется/null
, таким образом, может тест на провал.
Расширение примера приветствия демонстрирует проблему:
@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-инъекция с Arquillian на WebLogic 10.3.5 не работает (содержит неработающие ссылки и упоминает
WebArchive
, тогда как в официальном руководстве используетсяJarArchive
как для SE, так и для EE, поэтому я предполагаю, чтоJarArchive
правильный) - Внедрение зависимостей не работает в Arquillian Test покрывает сбой внедрения, но это вызвано отсутствием классов в архиве, что не так для меня
- Внедрение @Stateless EJB в тесты Arquillian связано с ошибкой
Unsatisfied dependencies for type [MyEjbRemote] with qualifiers [@Default] at injection point [[field] @Inject private com.org.app.ejb.InjectionTest.ejb]
, которую я также получил в какой-то момент, но не помню когда, в этом большом потоке бесполезных необъяснимых сообщений об ошибках
MCVE — это https://github.com/krichter722/arquillian-demo (расширенный проект Java SE который должен работать на основе руководства) и https://github.com/krichter722/arquillian-demo-2 (мой собственный проект Java EE)
Я использую Arquillian 1.1.13.Final.