2014-04-25 11 views
5

Chcę przetestować mój serwlet za pomocą mockito. Chcę również wiedzieć, jakie są dane wyjściowe serwera. Więc jeśli serwlet wypisze coś w ten sposób:Mockito i HttpServletResponse - zapis danych wyjściowych do pliku tekstowego

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

Chcę zamiast tego napisać do pliku tekstowego. I stworzył makiety dla HttpServletResponse i powiedzieć Mockito powinien wrócić mój własny PrintWriter jeśli HttpServletResponse.getWriter() jest wywoływana:

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

pliku tekstowego jest generowany, ale jest pusty. Jak mogę to sprawić?

Edit:

@Jonathan: Ów rzeczywiście prawda, szydząc pisarza, jak również jest znacznie czystsze rozwiązanie. Rozwiązano to tak

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

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

Następnie można po prostu sprawdzić zawartość StringWriter i nie mają do czynienia z plikami w ogóle.

+0

Nice. Nie rozważałem użycia "StringWriter". – Jonathan

Odpowiedz

2

Aby zobaczyć dowolne wyjście z numerem PrintWriter, należy wykonać to: close() lub flush().

Alternatywnie można utworzyć PrintWriter with the autoFlush parameter, np .:

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

To zapisu pliku podczas println, printf lub format jest wywoływany.

Powiedziałbym, że zamykanie PrintWriter jest lepsze.

marginesie:

Czy uważane szydząc z Writer? Można uniknąć pisania do pliku i sprawdzenia oczekiwanych połączeń zamiast, np .:

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

Jeśli zdarzy się przy użyciu Wiosna to ma klasę MockHttpServletResponse ty.

@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(); 
} 
Powiązane problemy