2013-03-09 18 views
5

Sto scrivendo unit test per un progetto JERSEY.Come testare i metodi del controller JERSEY con UriInfo

Per i metodi senza stringa di query, posso solo istanziare il controller e chiamare il metodo.

Lavorare anche per argomento nel percorso perché appaiono come argomenti stringa del metodo.

Ma quando arrivo querystrings la modalità ha un argomento speciale (@Context UriInfo url)

Come posso costruire l'argomento UriInfo nel mio test di unità? Perché questa classe non ha costruttore?

+2

La sua molto insolito per testare una risorsa Jersey al di fuori di un contenitore, e il tipo di controproducente. Cose che non funzioneranno? Risorse iniettate del contenitore, interpretazione del percorso, estrazione di parametri, localizzatori di sub-risorse ... la lista continua. Se vuoi davvero testare le tue classi di risorse JAX-RS, dovresti farlo dal lato *** del client ***. – Perception

+0

Posso anche eseguire alcuni test in un contenitore tomcat, ma in termini di test dell'unità di debug dell'analisi di copertura del codice in esecuzione. Sono totalmente cieco perché questi si imbattono in 2 processi separati. –

+0

Se si esegue un Tomcat autonomo con la propria app distribuita, è possibile eseguire una prova di test jUnit su di essa che utilizza una libreria client per testare le risorse. È possibile utilizzare le librerie client Jersey o anche Apache HttpComponents per creare questi test. – Perception

risposta

2

UriInfo è un'interfaccia che non consente di creare direttamente l'oggetto. Devi creare una sottoclasse e creare la tua classe UriInfo. Quindi la tua classe uriinfo dovrebbe convertire String/url in oggetto UriInfo.

public class UriInformation implements UriInfo { 
    MultivaluedMap<String, String> pathParamMap; 
    MultivaluedMap<String, String> queryParamMap; 
    public UriInformation(UriInfo uriInfo) { 
     //parse uriInfo 
    } 
//setters/getters 
} 

In questo modo è possibile testare le risorse dell'unità senza eseguirla all'interno di tomcat/server.

6

Se stai usando Mockito nei test, si potrebbe prendere in giro fuori UriInfo invece:

import java.net.URI; 
import javax.ws.rs.core.UriInfo; 

UriInfo mockUriInfo = mock(UriInfo.class); 
when(mockUriInfo.getRequestUri()).thenReturn(new URI("http://www.test.com/go")); 
+0

quale classe URI hai usato qui? – k4sia

+1

Ho appena controllato e aggiunto le importazioni sopra .... questo è su Java 7 .... –

Problemi correlati