2016-05-26 5 views
0

Ich habe eine Spring-Boot-JMS-Anwendung, die beim Start mehrere WebShpere-MQ-Warteschlangen lädt und die Nachrichten aus diesen Warteschlangen in eine andere Warteschlange kopiert. Alles funktioniert, aber ich beginne ein paar Tests, und ich denke da sind ein paar Dinge, die ich nicht verstehe. Also habe ich eine Config-Klasse, die eine Menge annotierter Beans enthält, eine dieser Beans ist die Klasse, die die Nachricht lädt, bevor mein JMSListener gestartet wird. Ich habe einfach Unit-Test:Komponententest der Spring Boot JMS-Anwendung hinterlässt Nachrichten in der Warteschlange

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = ErrorQueueReportApplication.class) 
@ActiveProfiles(profiles = "DEV") 
public class CastsApplicationTests { 

    static Logger logger = LogManager.getLogger(CastsApplicationTests.class.getName()); 

    @Value("${hostname}") 
    String host; 

    @Test 
    public void testEcsProps(){ 
     System.out.println("Running test"); 
     assertEquals("hostname.someTLD", host); 
    } 

} 

Dieser Test geht, aber ich erwartete nur einfach meine @Value sehen überprüfen, ob sie gleich sind und getan. Aber wenn ich dies als Komponententest starte, wird meine gesamte Anwendung gestartet, und da ich eine Bean habe, die Warteschlangenverbindungen herstellt und eine Warteschlange lädt, macht dieser Komponententest die Warteschlangenverbindungen und lädt eine Warteschlange. Aber dann wird mein JMSListener nie gestartet, also bleibt alles nur in der Warteschlange und ich muss es manuell löschen. Das ist inakzeptabel.

Von was ich über Spring Boot verstehe, nimmt @SpringApplicationConfiguration() die Hauptklasse, die den Anwendungskontext haben wird und der Test-Runner startet die Anwendung wie es normalerweise würde. Wenn das der Fall ist, bin ich mir nicht sicher, wie ich mit Unit Testing vorgehen soll, wenn es jedes Mal meine Warteschlange lädt und sie nie liest. Irgendwelche Vorschläge oder Konzepte zu klären, um mir zu helfen, klarer zu sehen?

+0

Ich werde bei Bedarf weitere Klassen usw. hinzufügen, aber im Moment habe ich das Gefühl, dass dies eher ein Mangel an Verständnisproblem ist, das mit einiger Klärung behoben werden kann. –

Antwort

0

Also ich bin mir nicht sicher, ob dies nur ein Hack um die Funktionalität ist oder ob es einfach nur das Richtige ist. Ich habe nur eine @Before und eine @After eingerichtet und im Grunde nur die Warteschlange zu löschen, um sicherzustellen, was auch immer der Komponententest anlegt es immer auszieht.

Wenn sich irgendjemand dazu entschließt, zu etwas Wissensaustausch beizutragen, was genau vor sich geht und wie man mit dem Framework besser arbeitet, würde das immer noch geschätzt werden. Ansonsten erwarte ich, dass die Post auf den Grund des Internets fällt und nie wieder gesehen wird.