Можно ли запустить интеграционные тесты TestNG в контейнере Jetty с JNDI и контекстом Spring? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть конфигурация Maven + Failsafe + Jetty, описанная здесь: http://maven.apache.org/surefire/maven-failsafe-plugin/usage.html.

Моя конфигурация Jetty для локальной разработки определена в файле XML с некоторыми JNDI, как описано здесь: https://www.eclipse.org/jetty/documentation/9.3.x/using-jetty-jndi.html.

Можно ли запускать тесты TestNG внутри контейнера Jetty (среды), чтобы у меня был доступ ко всем JNDI и Spring-контекстам, к которым имеет доступ моя война (приложение)?

Мне кажется, что тесты всегда выполняются в какой-то изолированной среде, которая требует собственной настройки, но если это так, запускать Jetty в первую очередь кажется бессмысленным.За исключением, может быть, тех случаев, когда мне нужно сделать несколько HTTP-вызовов для проверки моих REST-конечных точек, но это не тот случай.

1 Ответ

0 голосов
/ 23 мая 2018

После некоторого исследования я наконец нашел способ запустить свои тесты с:

  1. Контекстом JNDI (InitialContext), настроенным из моего XML-файла конфигурации Jetty.
  2. Контекст Spring с некоторымиbean-компоненты, для инициализации которых требовались JNDI-ресурсы.

Моя цель состояла в том, чтобы повторно использовать существующую среду веб-контейнера.И поскольку у меня не было успеха с «тестами в контейнере», вместо того, чтобы фактически запустить Jetty на этапе предварительного тестирования, я решил написать свою собственную реализацию ContextLoader для @ContextConfiguration.

Вот общая идея моего решения:

public class ITestContextLoader extends GenericXmlWebContextLoader {

    @Override
    protected void loadBeanDefinitions(...) { 

        // Initial Context configuration

        Resource jettyXml = Resourse.newSystemResource("jetty-env.xml");
        InputStream resourceStream = jettyXml.getInputStream();
        XmlConfiguration xmlConfig = new XmlConfiguration(resourceStream);

        xmlConfig.configure(); // for some reason it's not only returns 
                               // instance of configured context, but also 
                               // populates InitialContext with JNDI resources


        // Bean definitions loading

        ... 
    }
}

Это не так, как я видел или хотел сделать это в первую очередь (когда я писалвопрос), но самое близкое решение я придумал на данный момент.Возможно, не самый лучший, поэтому я, безусловно, буду признателен за альтернативы, советы и указатели.

...