2016-04-30 48 views
13

kullanarak bellek içi veritabanı için tümleştirme testleri jersey-test-framework-provider-inmemory, h2 veritabanı ve org.springframework.jdbc.core.JdbcTemplate'u kullanan Jersey REST API'sı için e2e tümleştirme testlerini tasarlamanın ve çalıştırmanın uygun yolu nedir?Jersey e2e Spring'in JDBCTemplate

Gereksinimler:

test kapsamı olmalıdır uçtan uca: kaynak başlayarak h2 veritabanına tüm uygulamanın geçiyor.

Yazma testleri:

birbirleriyle etkileşime başlıca nedeni, IDE JUnit gelen hep birlikte çalıştırırsanız Şu anda benim JUnit entegrasyon testleri (JUnit ile eş zamanlı olarak çalıştıran) başarısız. Başka bir sorun, her testten sonra geri alınması gerekenler, işlem desteğini kullanmalıdır (şu anda @Transactional ek açıklaması, yardımcı olacak bir şey yapmamaktadır). Bu tür testleri desteklemek için gereken en küçük Spring'in araçları nelerdir? Nasıl çalışır? @Transactional başka bir yere yerleştirilmeli mi?

Örnek:

@Transactional 
public class OrderResourceIT extends JerseyTest { 

    @Override 
    protected Application configure() { 
     // config 
    } 

    @Override 
    protected void configureClient(final ClientConfig config) { 
     // config 
    } 

    @Before 
    public void startUp(){ 
     // database bootstrap programmatically before each test 
    } 


    @Test 
    @Transactional 
    public void testGetOrders(){ 
     Response response = target("/orders") 
       .request() 
       .get(); 

     List<Order> orders = response.readEntity(new GenericType<List<Order>>(){}); 

     // asserts 
    } 
} 

Yürütme:maven-failsafe-plugin ile yürütmek için planlanan var

:

Failsafe Plugin documentation kap bitiminde pre-integration-test phase ve post-integration-test kabın bağlanması başlangıç ​​göstermektedir. jersey-container-grizzly2-http kapsayıcım programsal olarak yapılandırılmışsa nasıl yapılandırılabilir? Example:

public class Main { 
    // Base URI the Grizzly HTTP server will listen on 
    public static final String BASE_URI = "http://localhost:8080/myapp/"; 

    public static HttpServer startServer() { 
     // create a resource config that scans for JAX-RS resources and providers 
     // in com.example.rest package 
     final ResourceConfig rc = new ResourceConfig().packages("com.example.rest"); 

     // create and start a new instance of grizzly http server 
     // exposing the Jersey application at BASE_URI 
     return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc); 
    } 

    public static void main(String[] args) throws IOException { 
     final HttpServer server = startServer(); 
     System.out.println(String.format("Jersey app started with WADL available at " 
       + "%sapplication.wadl\nHit enter to stop it...", BASE_URI)); 
     System.in.read(); 
     server.stop(); 
    } 
} 

örnek kod çalışırken görmek mükemmel olurdu.

+2

Sen, bir HTTP isteği karşısında işlem sınırını yayılan olamaz mevcut tüm versiyonu için

eşzamanlı olarak çalışırlarsa, sınama başına farklı bir veritabanı/web kapsayıcısını döndürürdüm, dropwizard DropwizardAppRule sınıfının nasıl çalıştığına benzer şekilde, şu şekilde sıralanır: https://gist.github.com/stringy05/76a0 1aa4d611829ab1b59dd938b9db6d, sadece bahar ortamınızı ve db katmanını değiştirmeniz gerekiyor, bunu SpringClassRule – stringy05

cevap

1

Bence senaryonun dbunit testi için çok uygun olduğunu düşünüyorum. Dbunits ile, her bir test durumu için bir bellek içi veritabanı oluşturulur ve test durumu yürütme tamamlandığında yok edilir. Bu veritabanının veri modeli, tamamen yapılandırdığınız veri kümesine bağlıdır. Şuna bir göz atınız: http://archive.oreilly.com/pub/post/dbunit_made_easy.html

0

Merhaba, jersey-formaları olarak jersey tarafından sağlanan bir çok örnek var. Dinlenme servislerini barındıran her modül için bir dizi deneme testi seti vardır.

Örnek, jersey indirme sayfasından indirilebilmektedir. https://jersey.java.net/download.html

İleride değişebilecek tam bağlantılar aşağıda verilmiştir.Geçerli son sürümü için

http://repo1.maven.org/maven2/org/glassfish/jersey/bundles/jersey-examples

: Eğer testler izole etmek gerekirse bu yüzden

http://repo1.maven.org/maven2/org/glassfish/jersey/bundles/jersey-examples/2.23.1/jersey-examples-2.23.1-all.zip

+0

ile yapabilmeniz gerekir. Potansiyel bir çözümün bağlantısı her zaman bekler, ancak lütfen [linkin etrafına bağlam ekleyin] (http://meta.stackoverflow.com/a/8259/169503), böylece diğer kullanıcılarınızın ne olduğu ve neden olduğu hakkında fikir sahibi olurlar. Orada. Hedef siteye ulaşılamaması veya sürekli olarak çevrimdışı olması durumunda, her zaman önemli bir bağlantının en alakalı bölümünü belirtin. Harici bir siteye bağlantıdan çok daha fazla olmanın, [Neden ve bazı cevaplar nasıl siliniyor?] (Http://stackoverflow.com/help/deleted-answers) için olası bir sebep olduğunu göz önünde bulundurun. – ddb