2014-04-25 13 views
5

Voglio testare il mio servlet usando mockito. Voglio anche sapere qual è l'output del server. Quindi, se il servlet scrive qualcosa in questo modo:Mockito e HttpServletResponse - scrittura dell'output su file di testo

HttpServletResponse.getWriter().println("xyz"); 

Desidero invece scriverlo su un file di testo. Ho creato il finto per la HttpServletResponse e dire Mockito deve restituire la mia PrintWriter personalizzato se HttpServletResponse.getWriter() viene chiamato:

HttpServletResponse resp = mock(HttpServletResponse.class); 
PrintWriter writer = new PrintWriter("somefile.txt"); 
when(resp.getWriter()).thenReturn(writer); 

Il file di testo viene generato, ma è vuota. Come posso farlo funzionare?

Edit:

@ Jonathan: Questo è effettivamente vero, beffardo lo scrittore pure è una soluzione molto più pulito. Risolto in quel modo

StringWriter sw = new StringWriter(); 
PrintWriter pw =new PrintWriter(sw); 

when(resp.getWriter()).thenReturn(pw); 

Quindi posso solo controllare il contenuto della StringWriter e non avere a che fare con i file a tutti.

+0

Nice. Non avevo considerato l'uso di un 'StringWriter'. – Jonathan

risposta

2

Per vedere qualsiasi output con PrintWriter è necessario close() o flush() esso.

In alternativa è possibile creare il PrintWriter with the autoFlush parameter, ad es .:

final FileOutputStream fos = new FileOutputStream("somefile.txt"); 
final PrintWriter writer = new PrintWriter(fos, true); // <-- autoFlush 

Ciò scrivere sul file quando println, printf o format viene richiamato.

Direi che è preferibile chiudere lo PrintWriter.

parte:

avete considerato beffardo il Writer? Si potrebbe evitare di scrivere su un file e verificare le chiamate attesi invece, per es .:

verify(writer).println("xyz"); 
0

Se vi capita di essere utilizzando primavera allora ha una classe MockHttpServletResponse.

@Test 
public void myTest() { 
    MockHttpServletResponse response = new MockHttpServletResponse(); 
    // Do test stuff here 
    // Verify what was written to the response using MockHttpServletResponse's methods 
    response.getContentAsString(); 
    response.getContentAsByteArray(); 
    response.getContentLength(); 
} 
Problemi correlati