2010-04-20 12 views
15

Birim testi Apache CXF ile yazılmış bir RESTful arayüzünü test etmek istiyorum.İlkbaharda JUnit testleri için ServletContext nasıl enjekte edilir?

Bazı kaynaklar yüklemek için bir ServletContext kullanmak, bu yüzden vardır:

@Context 
private ServletContext servletContext; 

Bu GlassFish üzerinde dağıtırsanız

, ServletContext'te enjekte edilir ve beklenen gibi çalışır. Ama servis sınıfımdaki ServletContext'i nasıl enjekte edeceğimi bilmiyorum, böylece bir JUnit testi ile test edebilirim.

Spring 3.0, JUnit 4, CXF 2.2.3 ve Maven'i kullanıyorum.

+0

http://stackoverflow.com/questions/2665773/spring-i-wish-to-create-a-junit-test-for-a-web-application-webapplicationconte görün bakın – lexicore

cevap

21

Ünite testinizde, muhtemelen bir MockServletContext örneğini oluşturmak isteyeceksiniz.

Bu örneği, hizmet nesnesine ayarlayıcı yöntemiyle iletebilirsiniz.

1

Muhtemelen bunun için böyle Mockito kullandım servletContext.getResourceAsStream ya da böyle bir şey ile kaynak okumak istiyorum: Bahar 4 itibarıyla

@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

, birim test sınıfına @WebAppConfiguration ek açıklama olmalıdır yeterli, Spring reference documentation

@ContextConfiguration 
@WebAppConfiguration 
public class WebAppTest { 
    @Test 
    public void testMe() {} 
} 
İlgili konular