是否可以在具有JNDI和弹簧上下文的Jetty容器中运行TestNG集成测试?

时间:2018-05-22 10:24:48

标签: java spring maven jetty testng

我在此处描述了Maven + Failsafe + Jetty配置:http://maven.apache.org/surefire/maven-failsafe-plugin/usage.html

本地开发的My Jetty配置在XML文件中定义,其中包含一些JNDI,如下所述:https://www.eclipse.org/jetty/documentation/9.3.x/using-jetty-jndi.html

是否可以在Jetty容器(环境)中运行TestNG测试,以便我可以访问我的war(应用程序)可以访问的所有JNDI和Spring上下文?

在我看来,测试总是在某种孤立的环境中执行,这需要它自己的设置,但如果是这样的话,那么首先运行Jetty似乎毫无意义。除了那些我需要进行一些HTTP调用来测试我的REST端点的情况,但事实并非如此。

1 个答案:

答案 0 :(得分:0)

经过一番研究后,我终于找到了一种方法来运行我的测试:

  1. 从我的Jetty配置的JNDI上下文(InitialContext) 配置XML。
  2. 带有一些bean的Spring上下文,需要那些JNDI资源进行初始化。
  3. 我的目标是重用现有的Web容器环境。由于我没有成功进行“容器内测试”,而是在预集成测试阶段实际运行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
    
            ... 
        }
    }
    

    这不是我第一次看到它或想要这样做的方式(当我发布问题时),但是我现在提出的最接近的解决方案。也许不是最好的,所以我当然会欣赏替代方案,建议和指示。