Mockito mit Java-Asynchron-Sync-Konverter

8

Ich habe eine asynchrone Methode, die ich mit einem Countdown-Latch in eine Synchronisationsmethode umwandle. Ich habe Schwierigkeiten, einen Komponententest zu schreiben, ohne die Timeout-Funktion von Mockito zu verwenden. Ich kann nicht herausfinden, wie die Überprüfungsmethode auf den asynchronen Methodenaufruf warten kann:

%Vor%     
DD. 19.06.2012, 13:06
quelle

2 Antworten

2

Für diese Art von Tests verwende ich gerne eine kleine Bibliothek mit dem Namen awareness . Sie können es selbst mit einem Countdown-Latch tun, aber wie Sie gesehen haben, müssen Sie Ihren Test mit einer Machete hacken, um diese Arbeit zu machen.

In diesem Test sollten Sie verify aufrufen, nachdem Sie auf den Latch gewartet haben.

Ein weiteres Problem in Ihrem Code ist private Boolean response . Da du es in einem anderen Thread änderst, solltest du AtomicBoolean machen oder zumindest volatile deklarieren.

    
iwein 23.07.2012, 04:53
quelle
-1

Ich bin mir nicht sicher, ob ich dich richtig verstehe. Wenn Sie testen möchten, dass ein Thread unbegrenzt wartet, bis ein anderer Thread etwas tut, würde ich sagen, dass Sie es nicht tun können. weil das bedeutet, dass Sie fragen, ob das Programm beendet wird. stattdessen können Sie zwei Dinge tun.

  1. führen Sie regelmäßig konkurrierende Tests durch (per Definition ist es zufällig und gibt Ihnen keine Gewissheit, dass der Code korrekt ist). Sie erstellen einen komplexen Test mit zwei Threads, der Sperren verwendet, simuliert den Dienst und verwendet die Methode yeld (). In kritischen Abschnitten können Sie testen, ob es eine falsche Reihenfolge gibt. natürlich musst du es viele Male laufen lassen, also dauert es mehr als 10ms
  2. gehe davon aus, dass CountDownLatch korrekt funktioniert, stelle es vor und überprüfe, ob seine Funktionen in der richtigen Reihenfolge aufgerufen werden
piotrek 20.06.2012 20:03
quelle

Tags und Links