ich versuchte PollingConditions zu verwenden, um ein ähnliches Szenario zu erfüllen (die war nicht hilfreich), fand aber stattdessen Befriedigung in Spocks BlockingVariables. Um zu überprüfen, dass SomeService.method() zumindest einmal in Funktion ClassBeingTested.method() innerhalb einer bestimmten Timeout-Zeit aufgerufen:
def "verify an interaction happened at least once within 200ms"(){
given:
def result = new BlockingVariable<Boolean>(0.2) // 200ms
SomeService someServiceMock = Mock()
someServiceMock.method() >> {
result.set(true)
}
ClassBeingTested clazz = new ClassBeingTested(someService: someServiceMock)
when:
clazz.someMethod()
then:
result.get()
}
Wenn das Ergebnis gesetzt ist, wird die Sperrbedingung erfüllt sein, und result.get () müsste für die Bedingung, um zu bestehen, wahr werden. Wenn es nicht innerhalb von 200 ms gesetzt wird, wird der Test mit einer Zeitüberschreitungsausnahme fehlschlagen.
Peter - Ihre Lösung führt dazu, dass ich immer 200ms warten. In diesem Fall benutze ich lieber Mockito, weil es einfach funktioniert :) –
Deshalb habe ich gesagt "das nächste, was du bekommen kannst ist ...". –
Ist es etwas, das in Spock hinzugefügt werden soll? –