Angenommen, ich habe eine Klasse SomeClass
mit einer Methode void process()
. Die Implementierung dieser Methode ist ähnlich wie new Thread(this::someOtherMethod).start
(nur someOtherMethod
in einem bestimmten Thread ausführen).Warten auf eine Methodenausführung
mit einer Unit-Test für diese Methode abgewertet:
SomeClass class= new SomeClass(anObjectToWorkWith); class.process(); assertEquals(expectedObj, anObjectToWorkWith)
I erkannt haben, dass, wenn die process
Verfahren in einem bestimmten Thread ausführt, eine assertEquals
Anweisung vor der process
aufgerufen Verfahren abgeschlossen ist.
Daher habe ich eine Frage: Gibt es eine Möglichkeit, auf die process
Methodenausführung zu warten, um assertEquals
unbedingt nach der process
aufrufen zu müssen.
Vielen Dank im Voraus.
P.S. Stellen Sie keine Lösungen vor, die die Methode Thread.sleep
oder Lösungen verwenden, die eine Implementierung der Schnittstelle SomeClass
Runnable
erfordern, da diese Lösungen nicht der Aufgabenstellung entsprechen.
Wenn Sie class.process() die Thread-Instanz zurückgeben, kann der aufrufende Thread t.join() aufrufen. Das wird warten, bis der Unterfaden fertig ist. – bhspencer
@bhspencer die Sache ist, dass die SomeClass-Klasse eine Schnittstelle mit einer 'void process()' Methode implementiert, weshalb ich mit solchen Lösungen begrenzt bin. – draft
In diesem Fall könnten Sie der Instanz von SomeClass eine weitere Methode namens wait() hinzufügen. Sei der Thread ein Mitglied von SomeClass und in wait() rufe t.join() auf; – bhspencer