2010-04-20 10 views
15

Chcę przetestować interfejs RESTful napisany przy pomocy Apache CXF.Jak wstrzyknąć ServletContext dla testów JUnit ze sprężyną?

używam ServletContext załadować niektórych zasobów, tak mam:

@Context 
private ServletContext servletContext; 

Jeśli wdrożyć to na GlassFish, ServletContext jest wstrzykiwany i działa tak jak oczekiwano. Ale nie wiem jak wstrzyknąć ServletContext w mojej klasie usług, tak, że mogę przetestować go za pomocą testu JUnit.

Używam Spring 3.0, JUnit 4, CXF 2.2.3 i Maven.

+0

Zobacz http://stackoverflow.com/questions/2665773/spring-i-wish-to-create-a-junit-test-for-a-web-application-webapplicationconte – lexicore

Odpowiedz

21

W teście jednostki prawdopodobnie będziesz chciał utworzyć instancję z MockServletContext.

Następnie można przekazać tę instancję do obiektu usługi za pomocą metody ustawiającej.

1

Prawdopodobnie chcesz przeczytać zasoby z servletContext.getResourceAsStream czy coś takiego, bo to Użyłem Mockito tak:

@BeforeClass 
void setupContext() { 

    ctx = mock(ServletContext.class); 
    when(ctx.getResourceAsStream(anyString())).thenAnswer(new Answer<InputStream>() { 
     String path = MyTestClass.class.getProtectionDomain().getCodeSource().getLocation().getPath() 
       + "../../src/main/webapp"; 

     @Override 
     public InputStream answer(InvocationOnMock invocation) throws Throwable { 
      Object[] args = invocation.getArguments(); 
      String relativePath = (String) args[0]; 
      InputStream is = new FileInputStream(path + relativePath); 
      return is; 
     } 
    }); 

} 
14

od wiosny 4, @WebAppConfiguration adnotacji na jednostkę klasy testowej powinna być wystarczy znaleźć Spring reference documentation

@ContextConfiguration 
@WebAppConfiguration 
public class WebAppTest { 
    @Test 
    public void testMe() {} 
} 
Powiązane problemy