相关疑难解决方法(0)

如何使用Spring测试模拟的JNDI数据源?

我是Spring的新手,想知道如何创建使用模拟数据源的JUnit测试以及如何使用JNDI上下文?目前,我的应用程序使用tomcat中的JNDI上下文来检索连接,并通过该连接从数据库中检索数据.所以我想我需要模拟JNDI调用和数据检索.关于解决这个问题的最佳方法的任何好的指针都会很棒!非常感谢!

testing junit spring datasource mocking

31
推荐指数
2
解决办法
6万
查看次数

如何将DataSource绑定到InitialContext以进行JUnit测试?

我正在尝试对数据库"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)

java junit datasource jdbc glassfish

16
推荐指数
1
解决办法
5万
查看次数

标签 统计

datasource ×2

junit ×2

glassfish ×1

java ×1

jdbc ×1

mocking ×1

spring ×1

testing ×1