Spring 在junit测试用例中使用上下文参数

Spring 在junit测试用例中使用上下文参数,spring,junit,Spring,Junit,在Spring中,如何在junit测试中使用tomcat位置conf/context.xml中的上下文参数,或者如何在junit中创建上下文参数 <Context> <Parameter name="mail_host" value="smtp.gmail.com" override="true"/> </Context> 我正在我的代码中实现上述参数,如下所述 @值(“#{contextParameters.mail_host}”)。当我使用t

在Spring中,如何在junit测试中使用tomcat位置conf/context.xml中的上下文参数,或者如何在junit中创建上下文参数

<Context>
    <Parameter name="mail_host" value="smtp.gmail.com" override="true"/>
</Context>

我正在我的代码中实现上述参数,如下所述
@值(“#{contextParameters.mail_host}”)。当我使用tomcat时,它工作正常

但我在“org.springframework.beans.factory.config.BeanExpressionContext”类型的对象上找不到“Field或property”contextParameters“时出错 在junit中运行时


请帮助我,我在这一点上遇到了困难。提前感谢您,您可以在运行测试之前构建JNDI,并且在测试中可以从上下文检索信息。看看这个例子,他是如何使用jndi模拟注入数据源的。 您的上下文看起来是这样的(在实际的tomcat中)

在你的测试中,你可以得到这些信息

Context initContext = new InitialContext();
        Context webContext = (Context)initContext.lookup("java:/comp/env");

        DataSource ds = (DataSource) webContext.lookup("jdbc/nameofmyjdbcresource");
希望能有帮助。 编辑 e、 g


我使用的一个解决方案是使用一个简单的属性bean来存根测试spring applicationContext文件中的上下文参数。 因此,在你的情况下:


smtp.gmail.com

这是最简单的处理方法。
希望有帮助

您好,谢谢您的回复,但我想在进行junit测试时设置或使用“mail_host”。请帮助我。是的,您将执行完全相同的步骤,但您将使用自己的POJO,而不是使用OracleConnectionPoolDataSource。我将更新答案。非常感谢您的回复,但是我在junit中遇到了相同的错误,在我的整个应用程序中使用@Value(“#{contextParameters.mail_host}”)来访问context.xml中的“mail_host”参数。但在junit中运行时,在类型为“org.springframework.beans.factory.config.BeanExpressionContext”的对象上找不到一个错误“Field或property”contextParameters”。请帮助我找到任何可能的解决方案?如何在junit中访问tomcat容器参数。这是一个非常具有挑战性的问题,有没有可能做到这一点?
@BeforeClass
    public static void setUpClass() throws Exception {
        // rcarver - setup the jndi context and the datasource
        try {
            // Create initial context
            System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                "org.apache.naming.java.javaURLContextFactory");
            System.setProperty(Context.URL_PKG_PREFIXES, 
                "org.apache.naming");            
            InitialContext ic = new InitialContext();

            ic.createSubcontext("java:");
            ic.createSubcontext("java:/comp");
            ic.createSubcontext("java:/comp/env");
            ic.createSubcontext("java:/comp/env/jdbc");

            // Construct DataSource
            OracleConnectionPoolDataSource ds = new OracleConnectionPoolDataSource();
            ds.setURL("jdbc:oracle:thin:@host:port:db");
            ds.setUser("MY_USER_NAME");
            ds.setPassword("MY_USER_PASSWORD");

            ic.bind("java:/comp/env/jdbc/nameofmyjdbcresource", ds);
        } catch (NamingException ex) {
            Logger.getLogger(MyDAOTest.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
Context initContext = new InitialContext();
        Context webContext = (Context)initContext.lookup("java:/comp/env");

        DataSource ds = (DataSource) webContext.lookup("jdbc/nameofmyjdbcresource");
MyMailHost mailHost = new MyMailHost();
mailHost.setName("mail_host");
mailHost.setValue("smtp.gmail.com");
mailHost.setOverride(true);

 ic.bind("java:/comp/env/jdbc/mymailhost", mailHost);

in @Test
Context initContext = new InitialContext();
            Context webContext = (Context)initContext.lookup("java:/comp/env");

            MyMailHost ds = (MyMailHost) webContext.lookup("jdbc/mymailhost");