2016-09-08 1 views
1

Ich versuche, die Tatsache zu bestätigen, dass ich 10 Nachrichten von pubnub erhalten habe. Ich empfange sie tatsächlich an die Konsole. Aber was wäre der richtige Weg, um dies zu behaupten? Ich bin mir nicht ganz sicher, welche Syntax ich verwenden soll.Asserting Ich habe 10 Nachrichten empfangen

@Test 
public void testPublisher() throws PubnubException { 



    // Send 10 messages 
    for(int i = 0; i <= 10; i++){ 
     service.publish("my_channel", "Message: " + i); 
    } 

    // Wait until we have recieved the 10 messages 
    do{}while(service.count() <= 10); 

    // For each message print out the details 
    service.getMessages().forEach(System.out::println); 

    assertArrayEquals(service.count()); 
} 

Antwort

0

sollten Sie in der Lage sein
assertTrue(service.count() == 10);

+0

Dies funktioniert aber nicht aus einem anderen Grund. Vielen Dank. – Peter

+0

'assertEquals (service.count(), 10);' ist schwanger ein bisschen mehr idiomatisch. – assylias

+0

Wenn Sie idiomatisch sind, sollte es sein 'assertEquals (10, service.count())' –

0

Ihre do...while Schleife bekannt als „busy Spin“ ist zu verwenden, die ein Anti-Muster in den meisten Fällen in Betracht gezogen wird, und sollte vermieden werden. Fleißiges Drehen zerstört die CPU, während sie wartet und Ihre Implementierung könnte auch ewig laufen, wenn etwas schief läuft und 10 Nachrichten nicht empfangen werden.

https://en.wikipedia.org/wiki/Busy_waiting

Sie sollten einen Sperrmechanismus prüfen ... möglicherweise mit einem Timeout wie BlockingQueue.take() oder BlockingQueue.poll() oder CountdownLatch.await()

Verwandte Themen