2012-10-22 11 views
7

Mam test jednostkowy, w którym kpię z klasy java.net.URI. Ponadto tworzę jMockit NonStrictExpectation, gdzie oczekuję wywołania URI.getPath() i zwrócenia konkretnego ciągu.Powracaj różne wartości za każdym razem, gdy oczekiwane jest jMockit

Testowany kod dwukrotnie wywołuje URI.getPath(), gdzie za każdym razem muszę wysłać inny ciąg znaków.

Oto mój rzeczywisty sposób badany:

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(); 
} 

Oto kod testów jednostkowych:

@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(); 
} 

Teraz chcę "/resource/2" zostać zwrócone z moim oczekiwaniem gdy URI.getPath() nazywa sekund czas. Ale zawsze uderza w pierwsze oczekiwanie i zwraca "/recourceGroup/1". To jest mój problem.

Jak to się stało? Nie mogę naprawdę używać StrictExpectations z wielu powodów i będę musiał trzymać się z numerem NonStrictExpectations.

Odpowiedz

15

Wygląda po prostu trzeba wymienić uri.getPath() raz i korzystać z wersji varargs z returns ... coś takiego:

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

to według documentation, w każdym razie ... Ja nie testowane to ja.

W przypadku zapisu wielu wartości rzędu powrotne dla danego oczekiwania, pojedyncze połączenie dla zwrotu (Przedmiot ... Object) Sposób ten może być wykonany.

+0

Pracowałem jak urok ... Dzięki :) –

+0

Świetnie, cieszę się, że zadziałało! –

+0

Link do dokumentacji w odpowiedzi jest uszkodzony. Oto zaktualizowany [link] (http://jmockit.org/tutorial/Mocking.html#results) –