我是Spring的新手,想知道如何创建使用模拟数据源的JUnit测试以及如何使用JNDI上下文?目前,我的应用程序使用tomcat中的JNDI上下文来检索连接,并通过该连接从数据库中检索数据.所以我想我需要模拟JNDI调用和数据检索.关于解决这个问题的最佳方法的任何好的指针都会很棒!非常感谢!
我正在尝试对数据库"worker"类运行JUnit测试,这些类对其进行jndi查找InitialContext以获取a DataSource.工作类通常在Glassfish v3 App Server上运行,该服务器定义了适当的jdbc资源.
代码在App Server上部署时运行得很好,但是没有从JUnit测试环境运行,因为很明显它找不到jndi资源.所以我尝试在测试类中设置一个InitialContext,它将数据源绑定到适当的上下文,但它不起作用.
这是我在测试中的代码
@BeforeClass
public static void setUpClass() throws Exception {
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
SQLServerConnectionPoolDataSource testDS = new SQLServerConnectionPoolDataSource();
testDS.setServerName("sqlserveraddress");
testDS.setPortNumber(1433);
testDS.setDatabaseName("dbname");
testDS.setUser("username");
testDS.setPassword("password");
ic.bind("java:/comp/env/jdbc/TestDS", testDS);
DataWorker dw = DataWorker.getInstance();
} catch (NamingException ex) {
Logger.getLogger(TitleTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,DataWorker类或多或少地使用以下代码的方法
InitialContext ic = null;
DataSource ds = null;
Connection c …Run Code Online (Sandbox Code Playgroud)