CDI testet mit Arquillian

9

Vor 3 Tagen habe ich den Leitfaden "Erste Schritte" von Arquillian fertiggestellt und entschieden, dass dies eine gute Sache wäre, um meinen Teil eines CQRS-Systems zu testen.

Leider hat sich das als etwas weniger als geradlinig erwiesen. Ich habe die letzten 3 Tage gegoogelt und das Problem wurde durch keine der Lösungen gelöst, die für andere funktioniert haben.

Ich komme zu dem Schluss, dass das Problem mit meinem Code ist, obwohl ich nicht sehe, wie.

Meine Aufgabe besteht darin, einen Ereignis-Listener zu schreiben, der ein ActiveMQ-Thema für Ereignisse abhört und dann die "Ansicht" in einer Mongo-Datenbank aktualisiert.

Es wird viele Ereignisse im System geben, daher erschien es mir vernünftig, eine abstrakte Basisklasse zu erstellen, die von allen Event-Listenern erweitert wird.

Diese Basisklasse enthält den Mongo-Client und registriert sich, um das Thema anzuhören. Es verwendet einen überladenen Getter für den Listenernamen, den es als Bean-Referenz in einer Kamelroute verwendet. Die Listener-Client-ID wird aus einem statischen Long generiert, der bei jeder Listener-Registrierung inkrementiert wird. Dadurch wird sichergestellt, dass jeder Listener alle Ereignisse sehen kann, die zum Thema gesendet wurden. Absicht ist, später einen Filter hinzuzufügen, um die Anzahl der empfangenen Ereignisse zu reduzieren.

Ich habe diesen Code erstellt und ihn von einem Timer generiert, der Ereignis-Themen-Posts generiert und alles funktioniert gut.

Das Problem dabei ist eine Qualitätsanforderung, dass covertura eine 80% ige Codeabdeckung durch Komponententests meldet.

Meine Testanwendung ist kein Komponententest, daher ist meine Codeabdeckung 0%.

Ich bin zu Arquillian über ein paar andere Methoden des Komponententests in CDI gekommen, aber Arquillian scheint die beste Option zu sein, wenn ich es nur zum Laufen bringen könnte.

Der Fehler, den ich bekomme, ist:

%Vor%

Ich habe Deltaspike in den Pom aufgenommen, ich habe es der Shrinkwrap-Implementierung hinzugefügt

POM-Extrakt

%Vor%

Testklasse     @RunWith (Arquillian.class)     Öffentliche Klasse ListenerTest {

%Vor%

Meine Strahlen.xml

%Vor%

Wie Sie sehen können, habe ich sogar versucht, den WindowBeanHolder dem Code hinzuzufügen.

Ich habe in den letzten Tagen viele Änderungen am Code vorgenommen. Ich habe nicht die volle Pom usw. enthalten, da dies nicht benötigt wird, kann aber bei Bedarf hinzugefügt werden.

Wenn Sie einen Vorschlag haben, wo ich von hier aus gehen kann, vielen Dank im Voraus.

    
user2120275 02.07.2015, 17:46
quelle

1 Antwort

0

Abstrakt die Datenbankschicht über eine Schnittstelle. Stellen Sie einen Mongo-Impl für Prod, aber einen Unit-testable Stateful "Dummy" impl zum Testen bereit.

Lassen Sie Ihren gesamten Code auf die Schnittstelle verweisen und injizieren Sie (falls nötig mit Reflektion) den Dummy-Impl, um Ihren Code zu testen, bevor Sie die Komponententests durchführen.

    
Bohemian 22.12.2016 08:16
quelle

Tags und Links