2012-10-22 4 views
7

Ho un test di unità in cui sto prendendo in giro la classe java.net.URI. Inoltre, sto creando un jMockit NonStrictExpectation dove mi aspetto invocazione di URI.getPath() e restituendo una stringa particolare.Restituisce valori diversi ogni volta da jMockit expectation

Il codice in prova invoca il numero URI.getPath() due volte, in cui è necessario inviare una stringa diversa ogni volta.

Ecco il mio metodo effettivo in prova:

public void validateResource() { 
    // some code 
    URI uri = new URI(link1.getHref()); 
    String path1 = uri.getPath(); 
    // some more code 
    uri = new URI(link2.getHref()); 
    String path2 = uri.getPath(); 
} 

Ecco il codice di prova di unità:

@Mocked URI uri; 

@Test 
public void testValidateResource() { 
    new NonStrictExpectations() { 
     { 
      // for the first invocation 
      uri.getPath(); returns("/resourceGroup/1"); 

      // for the second invocation [was hoping this would work] 
      uri.getPath(); returns("/resource/2"); 
     } 
    }; 
    myObject.validateResource(); 
} 

Ora, voglio "/resource/2" essere tornato dalla mia aspettativa quando il URI.getPath() si chiama secondo tempo. Ma colpisce sempre la prima aspettativa e restituisce "/recourceGroup/1". Questo è il mio problema.

Come posso farlo? Non posso davvero usare StrictExpectations a causa di una serie di motivi, e dovrò attenermi a NonStrictExpectations.

risposta

15

sembra che tu solo bisogno di elencare uri.getPath() una volta, e utilizza la versione varargs di returns ... qualcosa di simile:

uri.getPath(); returns("/resourceGroup/1", "/resourceGroup/2"); 

Questo è secondo il documentation, comunque ... non ho testato me stesso.

In caso di registrazione di più valori di ritorno consecutivi per una data attesa, è possibile effettuare una singola chiamata al metodo di ritorno (Oggetto, Oggetto ...).

+0

Ha funzionato come un fascino ... Grazie :) –

+0

Grande, felice ha funzionato! –

+0

Il collegamento alla documentazione nella risposta è rotto. Ecco un aggiornamento [collegamento] (http://jmockit.org/tutorial/Mocking.html#results) –