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.
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