2015-07-02 6 views
9

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 и т. Д., Поскольку это может не понадобиться, но при необходимости может добавить.

Если у вас есть какие-либо предложения относительно того, где я могу пойти отсюда, большое спасибо заранее.

+0

DeltaSpike сам тестируется через Arquillian. Я бы проверить их настройки. –

ответ

0

Аннотация слой базы данных посредством интерфейса. Предоставьте mongo impl для prod, но тестируемый с учетом состояния «манекен» для тестирования.

Попросите весь свой код обратиться к интерфейсу и приложить (используя отражение при необходимости) фиктивный имп, чтобы протестировать ваш код до запуска модульных тестов.