2015-07-02 18 views
9

3 dni temu ukończyłem przewodnik "Pierwsze kroki" Arquilliana i zdecydowałem, że będzie to użyteczne do testowania jednostkowego części systemu CQRS.Testowanie CDI z Arquillianem

Niestety okazało się to nieco mniej niż proste naprzód. Mam google przez ostatnie 3 dni i problem nie został rozwiązany przez żadne z rozwiązań, które działały dla innych.

Doszedłem do wniosku, że problem jest związany z moim kodem, chociaż nie rozumiem w jaki sposób.

Moim zadaniem jest napisanie detektora zdarzeń, który słucha tematu ActiveMQ dla zdarzeń, a następnie aktualizuje "widok" w Mongo DB.

W systemie będzie wiele zdarzeń, więc wydaje mi się rozsądne utworzenie abstrakcyjnej klasy bazowej, którą rozszerzają wszystkie programy nasłuchujące zdarzeń.

Ta klasa bazowa zawiera klienta Mongo i rejestruje, aby odsłuchać temat. Używa przeciążonego gettera dla nazwy słuchacza, której używa jako odniesienia do fasoli na trasie wielbłąda. Identyfikator klienta detektora jest generowany ze statycznej długości, która jest zwiększana w każdej rejestracji odbiornika. Zapewnia to, że każdy słuchacz będzie mógł zobaczyć każde wydarzenie zamieszczone w temacie. Zamiarem jest później dodać filtr, aby zmniejszyć liczbę otrzymywanych zdarzeń.

Zbudowałem ten kod i uruchomiłem go z licznika czasu, generując posty tematów zdarzeń i wszystko działa dobrze.

Problem z tym jest wymogiem jakości, aby cobertura raportował 80% pokrycia kodu w testach jednostkowych.

Moja aplikacja testowa nie jest testem jednostkowym, więc mój zasięg kodu wynosi 0%.

Przyszedłem do Arquilliana za pomocą kilku innych metod testowania jednostkowego w CDI, ale Arquillian wydaje się najlepszą opcją, gdybym tylko mógł go uruchomić.

Błąd otrzymuję to:

java.lang.IllegalStateException: Could not find beans for Type=class org.apache.deltaspike.core.impl.scope.window.WindowBeanHolder and qualifiers:[] 

mam włączone deltaspike w pom, dodałem go do rozmieszczenia shrinkwrap

ekstrakt 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> 

klasy test @RunWith (Arquillian.class) Publiczna klasa 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); 
    } 
} 

Moja 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> 

Jak widać mam nawet próbowała dodanie WindowBeanHolder do kodu.

Dokonałem wielu zmian w kodzie w ciągu ostatnich kilku dni. Nie uwzględniłem całego pom itd., Ponieważ może on nie być potrzebny, ale może dodać, jeśli jest to wymagane.

Jeśli masz jakieś sugestie co do tego, dokąd mogę się udać, z góry dziękuję.

+0

Sam DeltaSpike jest testowany przez Arquilliana. Sprawdziłbym ich konfigurację. –

Odpowiedz

0

Streszczenie warstwy bazy danych za pomocą interfejsu. Podaj mongo impl dla prod, ale testowany jest testowany "manekin" testowany przez jednostkę.

Niech cały twój kod odwołuje się do interfejsu i wstrzyknij (za pomocą refleksji, jeśli to konieczne) manekina impaktuje, aby przetestować swój kod przed uruchomieniem testów jednostkowych.