Versuch, einen Spring JUnit-Runner-Test mit RabbitTemplate auszuführen und den Listener mit einer Mockito-Stubbed-Serviceklasse zu injizieren. Versuchen, die Interaktion mit dem Mock zu verifizieren. Mit den Beispielen, die ich gesehen habe, dachte ich, das wäre möglich. RabbitMQ funktioniert. Wenn ich mich im Dashboard anmelde, kann ich die Nachrichten dort sehen. Kann Nachrichten auch mit einer eigenständigen Konsolenanwendung konsumieren.
%Vor%dann die Kaninchen-Listener-Konfiguration
%Vor%
Versucht, in den MessgelistenerAdaptor zu injizieren, dachte auch, dass der Test notwendig war, um den Hörer korrekt zu verkabeln. Mit dem injizierten Adapter kann ich überprüfen, ob der Delegat in und mit dem Stub injiziert wird. Der Test scheitert bei Null-Interaktionen mit Mock. Ich kann mich in rabbitmq einloggen und die Nachrichten sind da. Das injizierte Listener-Objekt verbraucht während der Ausführung dieses Tests keine Nachrichten aus der Warteschlange.
Fast vergessen, sagte der Zuhörer. Versuchte Standard-Signatur und versuchte die design-Methode. %Vor%Irgendwelche Vorschläge wären hilfreich und ich schätze Ihre Hilfe im Voraus.
Ich kann in Ihrem Test keine Synchronisierung sehen. Messaging ist von Natur aus asynchron (was bedeutet, dass der Tour-Test beendet werden kann, bevor die Nachricht ankommt).
Verwenden Sie ein Latch-Konzept, das blockiert, bis die Nachricht eintrifft oder bis das Zeitlimit abgelaufen ist.
Zuerst benötigen Sie eine Test-Listener-Bean für Ihre Warteschlange:
%Vor%Stellen Sie sicher, dass Sie es so konfigurieren, dass es anstelle des ursprünglichen Listeners im Testkontext verwendet wird.
Dann kannst du in deinem Test den Latch setzen:
%Vor% Beachten Sie, dass es bessere Möglichkeiten gibt, Latches zu verwenden (z. B. Channel Interceptors oder LatchCountDownAndCallRealMethodAnswer
mit Mockito), aber dies ist die Grundidee. Weitere Informationen finden Sie in der Spring-AMQP-Testreferenz .