Подтвердить что ты не робот

Тесты интеграции e2e в Джерси для базы данных в памяти с использованием Spring JDBCTemplate

Каков надлежащий способ разработки и запуска тестов интеграции e2e для API Джерси REST, который использует jersey-test-framework-provider-inmemory, h2 базу данных и org.springframework.jdbc.core.JdbcTemplate?

Требования:

Область тестирования должна быть сквозной: начиная с ресурса и проходя через все приложения в базе данных h2.

Дать тесты:

В настоящее время мои интеграционные тесты JUnit терпят неудачу, если они выполняются вместе с IDE JUnit, главным образом потому, что они мешают друг другу (выполняется одновременно с JUnit). Другая проблема заключается в том, что после каждого теста нужно откатывать, использовать поддержку транзакций (в настоящее время аннотация @Transactional ничего не помогает). Какой минимальный набор инструментов Spring необходим для поддержки такого рода тестов? Как заставить его работать? Должен ли @Transactional размещаться где-нибудь еще?

Пример:

@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
    }
}

Исполнение:

Планируется выполнить с помощью maven-failsafe-plugin:

Документация Failsafe Plugin предлагает связать запуск контейнера с pre-integration-test phase и post-integration-test при завершении контейнера. Как его настроить, если мой контейнер jersey-container-grizzly2-http настроен программно? Пример:

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();
    }
}

Было бы замечательно видеть рабочий пример кода.

4b9b3361

Ответ 1

Я думаю, что ваш сценарий отлично подходит для тестирования dbunit. С dbunits создается база данных в памяти для каждого тестового примера, который должен быть выполнен, и уничтожается по завершении выполнения тестового примера. Модель данных этой базы данных полностью зависит от настраиваемого набора данных xml. Посмотрите на это: http://archive.oreilly.com/pub/post/dbunit_made_easy.html

Ответ 2

Привет, есть множество примеров, представленных трикотажными примерами. Для каждого модуля, на котором размещаются остальные сервисы, есть набор тестовых модулей junit.

Пример можно загрузить с страницы загрузки джерси. https://jersey.java.net/download.html

Ниже приведены точные ссылки, которые могут измениться в будущем.

Для всех доступных версий:

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

Для текущей последней версии:

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