2016-03-22 1 views
2

Ich habe die folgenden Filter-Cache zu löschen:Wie Test "Cache-Control" in HTTP-Antwort auf Einheit - Feder mvc Anwendung

public class CacheControlFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain chain) throws IOException, ServletException { 

     logger.info("doFilter method called clearing cache"); 

     HttpServletResponse resp = (HttpServletResponse) response; 
     resp.setDateHeader("Expires", 0); 
     resp.setHeader("Last-Modified", new Date().toString()); 
     resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0"); 
     resp.setHeader("Pragma", "no-cache"); 

     chain.doFilter(request, response); 
    } 
} 

Ich mag einen Unit-Test durchzuführen, wenn die Cache-Control zu testen gesetzt werden zu no-cache, wenn der obige Code ausgeführt wird.

Grundsätzlich wollte ich einige Dummy-Wert in der Cache-Control Antwortheader hinzufügen und führen Sie meine Unit-Test, um zu überprüfen, ob es zum Beispiel auf no-cache gesetzt wird.

Ich verwende Mockito und das ist mein Ausgangspunkt, um die Prüfung durchzuführen, aber ich weiß nicht, wie ein Dummy-Wert Cache-Control auf die Antwort auf wie unten gezeigt:

public class CacheControlFilterTest { 

    @InjectMocks CacheControlFilter cacheControlFilter; 
    @Mock ServletRequest request; 
    @Mock HttpServletResponse response ; 
    @Mock FilterChain filterChain; 

    public CacheControlFilterTest() {} 

    @Test 
    public void doFilterTest() throws IOException, ServletException { 
     cacheControlFilter.doFilter(request, response, filterChain); 
    } 
} 

Jede Beratung ist sehr willkommen .

Antwort

0

Zunächst einmal sollten Sie die Mockito Runner hinzufügen, wenn Sie JUnit verwenden:

@RunWith(MockitoJUnitRunner.class) 
public class CacheControlFilterTest { ... } 

Grundsätzlich ich einige Dummy-Wert in der Cache-Control Antwort-Header hinzufügen wollte und ausführen mein Unit-Test, um zu überprüfen, ob es auf No-Cache zum Beispiel gesetzt ist.

Um das zu tun, würde ich persönlich vorziehen Frühling Mock Implementierungen von HttpServletRequest und HttpServletResponse, zu verwenden, die MockHttpServletRequest und MockHttpServletResponse sind, respectively. So würde Ihr CacheControlFilterTest so etwas wie folgt so weit:

@RunWith(MockitoJUnitRunner.class) 
public class CacheControlFilterTest { 
    @InjectMocks CacheControlFilter cacheControlFilter; 
    @Spy MockHttpServletRequest request; 
    @Spy MockHttpServletResponse response; 
    @Mock FilterChain filterChain; 

    // The rest will be roll out very soon! 
} 

Dann können Sie Benutzer diese Mock-Implementierungen in Ihrem Test, so etwas wie:

@Test 
public void doFilterTest() throws IOException, ServletException { 
    final String CACHE_CONTROL_VALUE = "no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0"; 
    response.setHeader("Cache-Control", "some value"); 

    cacheControlFilter.doFilter(request, response, filterChain); 

    assertEquals(response.getHeader("Cache-Control"), CACHE_CONTROL_VALUE); 
} 
+1

Vielen Dank es mit Feder feinen Arbeits Mock ein – user1999453