3 дня назад Я закончил руководство Arquillian «Getting Started» и решил, что это будет полезно использовать для модульного тестирования моей части системы CQRS.CDI-тестирование с Arquillian
К сожалению, это оказалось немного меньше, чем прямо вперед. Я занимаюсь поиском в течение последних 3 дней, и проблема не решена ни одним из решений, которые работали для других.
Я прихожу к выводу, что проблема связана с моим кодом, хотя я не вижу, как это сделать.
Моя задача - написать прослушиватель событий, который прослушивает тему ActiveMQ для событий, а затем обновляет «представление» в Mongo DB.
В системе будет много событий, поэтому мне было разумно создать абстрактный базовый класс, который распространяется на все прослушиватели событий.
Этот базовый класс содержит клиента Mongo и регистрируется для прослушивания темы. Он использует загруженный getter для имени слушателя, который он использует в качестве ссылки на bean-ссылки на верблюжьем маршруте. Идентификатор клиента-слушателя генерируется из статического длинного, который увеличивается при каждой регистрации слушателя. Это гарантирует, что каждый слушатель увидит каждое событие, отправленное в тему. Намерение состоит в том, чтобы позже добавить фильтр, чтобы уменьшить количество полученных событий.
Я создал этот код и привел его из сообщений о событиях, генерирующих таймер, и все работает отлично.
Неполадка с этим - требование качества, чтобы иметь сообщение cobertura об охвате 80% кода путем модульных тестов.
Мое тестовое приложение не является модульным тестом, поэтому мой код составляет 0%.
Я пришел в Аркиллиан через пару других методов модульного тестирования в CDI, но Arquillian, кажется, лучший вариант, если я могу только заставить его работать.
Ошибки я получаю:
java.lang.IllegalStateException: Could not find beans for Type=class org.apache.deltaspike.core.impl.scope.window.WindowBeanHolder and qualifiers:[]
Я включил deltaspike в П, я добавил его к развертыванию Shrinkwrap
экстракт POM
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-api</artifactId>
<version>${deltaspike.version}</version>
</dependency>
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-impl</artifactId>
<version>${deltaspike.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
<version>2.0.0</version>
</dependency>
Тест класс @RunWith (Arquillian.class) Публичный класс ListenerTest {
AbstractEventListener listener = null ;
WindowBeanHolder w = new WindowBeanHolder();
@Deployment
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class).addAsLibraries(Maven.resolver().loadPomFromFile("pom.xml")
.resolve("org.apache.deltaspike.core:deltaspike-core-api",
"org.apache.deltaspike.core:deltaspike-core-impl")
.withoutTransitivity().asFile())
.addAsWebInfResource("beans.xml");
}
@Test
public void testExecute() {
Assert.assertNotNull(listener);
}
}
Мой beams.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all">
</beans>
Как вы можете видеть, что я даже попытался добавить WindowBeanHolder к коду.
Я внес большое количество изменений в код за последние несколько дней. Я не включил полный pom и т. Д., Поскольку это может не понадобиться, но при необходимости может добавить.
Если у вас есть какие-либо предложения относительно того, где я могу пойти отсюда, большое спасибо заранее.
DeltaSpike сам тестируется через Arquillian. Я бы проверить их настройки. –