gpt4 book ai didi

java - 在 jUnit 中设置 JNDI 数据源

转载 作者:太空狗 更新时间:2023-10-29 22:51:30 25 4
gpt4 key购买 nike

我正在尝试设置一些 jUnit 测试。我们的数据库由使用 JNDI 的服务器连接。我们有一个 xml 描述 root.xml 中的设置。如何设置 jUnit 以连接到数据库?我更愿意让它只读取 root.xml 中的内容,但我愿意以任何可行的方式设置它。

最佳答案

我找到了这个博客: https://blogs.oracle.com/randystuph/entry/injecting_jndi_datasources_for_junit

关于 H2 数据源: http://www.h2database.com/javadoc/org/h2/jdbcx/JdbcConnectionPool.html

所以对于我的代码:

package com.example.test;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import org.h2.jdbcx.JdbcConnectionPool;

import junit.framework.TestCase;

public class JunitDataSource extends TestCase {

public void setUp() 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");

JdbcConnectionPool ds = JdbcConnectionPool.create(
"jdbc:h2:file:src/main/resources/test.db;FILE_LOCK=NO;MVCC=TRUE;DB_CLOSE_ON_EXIT=TRUE", "sa", "sasasa");
// 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:/mydatasourcename", ds);
} catch (NamingException ex) {
Logger.getLogger(JunitDataSource.class.getName()).log(Level.SEVERE, null, ex);
}

}

public void testSimple() throws Exception {

// Obtain our environment naming context
Context initCtx = new InitialContext();

// Look up our datasource
DataSource ds = (DataSource) initCtx.lookup("java:/mydatasourcename");

Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();

ResultSet rset = stmt.executeQuery("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES");


while (rset.next()) {
System.out.println("<<<\t"+rset.getString("TABLE_NAME"));
}


}

}

注意:我必须在 Tomcat 的 bin 目录中添加 Tomcat 库和 jars 才能使其正常工作

关于java - 在 jUnit 中设置 JNDI 数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12545129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com