2012-05-15 18 views
8

JerseyTest kullanarak RESTful web hizmeti için bazı JUnit tabanlı tümleştirme testleri yazıyorum. JAX-RS kaynak sınıfları Spring kullanarak ve şu anda böyle bir test durumu ile birlikte evernthing telgraf ile havale ediyorum şu:Spring ve Jersey Test Çerçevesi ile birim testi

Bu sunucu uygulamasını kablolama için çalışır
public class HelloResourceTest extends JerseyTest 
{ 
    @Override 
    protected AppDescriptor configure() 
    { 
     return new WebAppDescriptor.Builder("com.helloworld") 
     .contextParam("contextConfigLocation", "classpath:helloContext.xml") 
     .servletClass(SpringServlet.class) 
     .contextListenerClass(ContextLoaderListener.class) 
     .requestListenerClass(RequestContextListener.class) 
     .build();   
    } 

    @Test 
    public void test() 
    { 
     // test goes here 
    } 
} 

, ancak, paylaşmak edebilmek istiyorum Benim test durumumda aynı bağlamda, testlerimin, SpringJUnit4ClassRunner için çağrı yapan sahte nesneleri, DAO'ları vb. Ne yazık ki, SpringJUnit4ClassRunner ayrı, paralel bir uygulama içeriği oluşturur.

Peki, herkes SpringServlet ve test durumum arasında paylaşılan bir uygulama bağlamını nasıl oluşturabilirim?

Teşekkürler!

cevap

5

Bu sorunu çözmek için birkaç yol buldum.

İlk olarak, üzerinden çözmeye JerseyTest zarif bir uzantısı ile birlikte bu sorunun mükemmel bir açıklaması yoktur inek @ riffpie blog: Maalesef Unit-testing RESTful Jersey services glued together with Spring

, ben daha yeni bir sürümü kullanıyorum Bahar ve/veya Jersey (unutun) ve işe yaramadı. Benim durumumda, Jersey Test Framework'ü bırakıp Jersey Client ile birlikte gömülü İskeleyi kullanarak problemden kaçındım. Bu aslında benim durumumda zaten benim uygulamada gömülü İskelesi kullandığımdan beri daha iyi bir anlam ifade ediyor. yves amsellem, unit testing with the Jersey Client and embedded Jetty'un güzel bir örneğine sahiptir. Bahar entegrasyon için, ben şöyle Trimbo enJersey Tests with Embedded Jetty and Spring

+0

[Bu diğer örnek kod] (https://github.com/yamsellem/jersey-basics/blob/master/src/test/java/com/xebia/resource/ProductResourceJacksonTest.java) Grizzly veya Dağıtım için iskele. Grizzly biraz daha hızlı, ancak web.xml kullanamazsınız (bu yüzden kod ile yapılandırılmalıdır). –

9

geçersiz kılma JerseyTest.configure bir varyasyonunu kullandı:

@Override 
protected Application configure() { 
    ResourceConfig rc = new JerseyConfig(); 

    rc.register(SpringLifecycleListener.class); 
    rc.register(RequestContextFilter.class); 

    rc.property("contextConfigLocation", "classpath:helloContext.xml"); 
    return rc; 
} 

SpringServlet ihtiyaç duyulmadı Benim için, ama sen çağırmak mümkün olabileceğini gerekiyorsa Bunun için rc.register.

+1

Çözümünüz, Jersey 2.x içindir. – NSPKUWCExi2pr8wVoGNk

+0

@ben: lütfen bağlamConfigLocation'a birden çok uygulama bağlamını aktarmam için bana yardımcı olun. virgülle ayrılmış veya dizi dizisine burada izin verilmez. – developer

+0

tek yol, test yayı bağlamı oluşturmak ve uygulama içeriğinizi filoya aktarmaktır. test dosyasını jersey yapılandırmasında kullanın – Chandru