Ich versuche, einen Integrationstest für JMS-Dienst zu schreiben, der wie folgt aussieht.JMS-Integrationstests
@JmsListener(destination = "mailbox", containerFactory = "myFactory")
public void receiveMessage(Email message) throws InterruptedException {
try {
sendEmail(message);
}catch (Exception e){
LOGGER.log(Level.SEVERE,"Failed to deliver email",e);
Thread.sleep(TimeUnit.SECONDS.toSeconds(Optional.of(retryInterval).orElse(5)));
throw e;
}
}
private void sendEmail(Email message){
...............
}
Zuallererst, kann ich dieses etwas wie spotten? Ich habe versucht, es zu verspotten, aber wenn ich eine Nachricht sende, ruft die Spring-Boot-Anwendung die tatsächliche JMS-Bean und nicht die falsche. Scheint so, als ob das nicht möglich ist. Auch wenn dies nicht möglich ist, kann ich zumindest die Bean outdoire und irgendwie überprüfen, ob die Methode receiveMessage aufgerufen wird. Außerdem sollte der sendEmail-Teil gefälscht werden, damit er nicht funktioniert. Ich habe ein paar Ideen, wie zum Beispiel eine Unterklasse zum Testen zu erstellen, aber nicht glücklich mit beiden. Also wolltest du mir eine bessere Arbeit vorschlagen?
Eigentlich habe ich ähnliche Ansatz verwendet und aktive mq wie in der Warteschlange für die Speicher-Messaging verwendet. Erstellt zwei Profile, testen und prod von wo ich Dinge anders anzustoßen. – Imran