Обратите внимание, что я очень близко отражаю приведенный здесь пример .
На самом деле моя ситуация несколько проще, так как я даже не тестирую с постоянным модулем в данный момент. Мой тестовый проект предоставляет простой MDB и сессионный компонент; и MDB, и сессионный компонент загружаются в обычном режиме и могут быть успешно протестированы (ограниченным образом) без внедрения.
Предлагаемая инъекция с пометкой @LocalClient
в моих модульных тестах не выполняется с известной ошибкой:
javax.naming.NamingException: Unable to find injection meta-data for [your-class]. Ensure that class was annotated with @org.apache.openejb.api.LocalClient and was successfully discovered and deployed. See <a href="http://openejb.apache.org/3.0/local-client-injection.html" rel="nofollow">http://openejb.apache.org/3.0/local-client-injection.html</a>
Когда я захожу на эту страницу, она сообщает, что мне может понадобиться добавить дополнительное свойство в настройку контекста моего теста. Так что теперь выглядит так:
@Override
public void setUp() throws Exception {
initializeContext();
}
public void initializeContext() {
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
// the property i've added
p.put("openejb.tempclassloader.skip", "annotations");
try {
InitialContext initialContext = new InitialContext(p);
initialContext.bind("inject", this);
} catch (Throwable throwable) {
throwable.printStackTrace();
throw new RuntimeException(throwable);
}
}
Но все равно не получается. Мне действительно нравится эта идиома, и я был бы очень взволнован, если бы смог успешно использовать ее в своих проектах.
Несколько других заметок:
- Я предоставляю «пустой» ejb-jar.xml (в src / main / resources) и application-client.xml (в src / test / resources), как предложено Apache, чтобы сказать OpenEJB сканировать classpath [ ОБНОВЛЕНИЕ: как оказалось, я делал это неправильно. Смотрите мой ответ ниже для предложения, которое сработало для меня.]
- Тестовые случаи, помеченные
@LocalClient
, не распознаются движком OpenEJB как фактически собранные и обработанные должным образом (как, например, мои MDB)
Заранее спасибо за любую помощь или руководство.