2014-02-10 8 views
5

In Mockito es Option, wenn Mock-Methode aufgerufen wurde, um zu überprüfen ist, und Timeout für diese Überprüfung (VerificationWithTimeout) angeben, zum Beispiel:Überprüfen Mock Spock mit der festgelegten Zeit

verify(mock, timeout(200).atLeastOnce()).baz(); 

Es gibt jede entspricht eine solche Funktionalität in Spock?

Antwort

4

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.

5

Es gibt keine Entsprechung in Spock. (PollingConditions kann nur für Bedingungen verwendet werden, nicht für Interaktionen.) Die nächstgelegene Sie bekommen kann, ist eine sleep() Anweisung im then Block hinzuzufügen:

when: 
... 

then: 
sleep(200) 
(1.._) * mock.baz() 
+1

Peter - Ihre Lösung führt dazu, dass ich immer 200ms warten. In diesem Fall benutze ich lieber Mockito, weil es einfach funktioniert :) –

+0

Deshalb habe ich gesagt "das nächste, was du bekommen kannst ist ...". –

+0

Ist es etwas, das in Spock hinzugefügt werden soll? –

0

Mithilfe von PollingConditions und einer booleschen Variablen wertet das folgende Beispiel eine Funktion aus, bis sie eine Interaktion erfüllt.

def "test the config watcher to reload games if a new customer directory is added"() { 

given: 
def conditions = new PollingConditions(initialDelay: 1, timeout: 60, factor: 1.25) 
def mockGameConfigLoader = Mock(GameConfigLoader) 
def gameConfigWatcher= new GameConfigWatcher(mockGameConfigLoader) 
boolean gamesReloaded = false 

when: 
conditions.eventually { 
    gameConfigWatcher.listenEvents() 
    assert gamesReloaded 
} 

then: 
1 * mockGameConfigLoader.loadAllGameConfigs() >> { 
    gamesReloaded = true 
} 
0 * _ 

}

Verwandte Themen