在 junit 测试用例中读取 tomcat server.xml

Reading tomcat server.xml in junit test case

我正在使用 java 7 和 tomcat 7。我在 jUnit 中为我的应用程序编写一些测试,它使用 tomcat/conf/server.xml 作为 jndi。这是 Maven 建议的文件夹结构。

src
|___test
    |___java
    |       |___Testcase.java
    |___resources
            |___conf
                   |___server.xml

我的样本 server.xml 看起来像这样,

<Resource name="jdbc/junit_db"
        type="javax.sql.DataSource"
        factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/junit_db?zeroDateTimeBehavior=round&amp;autoReconnect=true&amp;dumpQueriesOnException=true"
        username="root"
        password="password"
        maxIdle="0"
        minIdle="0"
        initialSize="1"
        maxWait="5000"
        maxActive="50"
        loginTimeout="1000"
        minEvictableIdleTimeMillis="2000"
        timeBetweenEvictionRunsMillis="5000"
        validationQuery="SELECT 1"
        testOnBorrow="true"
        testOnReturn="true"
        testWhileIdle="false"
        logAbandoned="true"
        removeAbandoned="true"
        poolPreparedStatements="true"
        maxOpenPreparedStatements="10000"
        accessToUnderlyingConnectionAllowed="false"
        defaultAutoCommit="false"
        defaultReadOnly="false"
        defaultTransactionIsolation="4"/>

<Resource name="jdbc/junit_hive_db" 
            type="javax.sql.DataSource" 
            factory="com.office.hive.HiveDataSourceFactory" 
            driverClassName="org.apache.hive.jdbc.HiveDriver" 
            url="jdbc:hive2://localhost:10000/default?zeroDateTimeBehavior=round" 
            username="" 
            password="" />

我想在 运行 jUnit 测试用例之前将此 server.xml 加载到 IntialContext 中。如何实现?

按照这个link,它有手动加载jndi到initialcontext的解决方案。

http://www.alexecollins.com/tomcat-context-junit-rule/

Give TomcatJNDI a try. 当输入 Tomcat 的配置文件时,它会在查找这些文件时立即提供所有在这些文件中声明的基于 JNDI 的对象。实现这个的代码例如

TomcatJNDI tomcatJNDI = new TomcatJNDI();
tomcatJNDI.processServerXml(serverXmlFile)
tomcatJNDI.processContextXml(contextXmlFile);
tomcatJNDI.start();

然后您就可以像往常一样查找对象了:

DataSource ds = (DataSource) InitialContext.doLookup("java:comp/env/path/to/datasource")

More about TomcatJNDI can be found here.