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

时间:2016-08-29 18:34:53

标签: java tomcat junit jndi server.xml

我正在使用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中。怎么做到这一点?

2 个答案:

答案 0 :(得分:0)

按照此链接,它具有手动将jndi加载到initialcontext的解决方案。

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

答案 1 :(得分:0)

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.