java - java中如何连接junit和tomcat?

标签 java mysql tomcat

我已经使用这个 link 在 tomcat 中配置了 MysqlDataSource .我已经编写了 junit 测试用例。当我从 junit 调用下面的连接时,它会抛出以下错误。

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

我使用了下面的代码

class DataConnection {
    private static DataSource dataSource;

public DataConnection() {
    try {
        Context ctx = new InitialContext();
        dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/test");
    } catch (NamingException e) {
       e.printStackTrace(); 
    }
}

public static Connection getConnection() throws SQLException {
    new DataConnection();
      Connection con=dataSource.getConnection();
      return con;
}
}

如何从junit调用tomcat?如何实现?

最佳答案

您提供的代码从 JNDI 获取数据库连接,例如从容器在 tomcat 中运行时。但是,对于单元测试(假设这就是您使用 JUnit 的目的),我宁愿建议使用“依赖注入(inject)”——例如显式地将数据库连接传递给被测代码,或者在测试运行之前手动设置它。

无需依赖 JNDI 来执行您的测试:这不是您想要测试的,相反,您只想验证您的实际代码是否正确运行。

您不需要任何花哨的库(例如 spring)来进行依赖注入(inject),只需稍微调整一下架构即可。这将大大增强应用程序的可测试性并缩短测试的执行时间。

(这是基于我根据您在问题中提供的少量信息对您的情况所做的假设)

关于java - java中如何连接junit和tomcat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15333251/

相关文章:

java - PrimeFaces 4.0 selectOneMenu-ajax-call 适用于 GlassFish 4.0,但不适用于 Tomcat 7.0.27?

java - 使用 log4j2 和 tomcat 进行 Spring 启动

java - 如何设置并显示本地数据库中的另一个字段?

mysql - 在 MySQL 中存储搜索引擎记录时处理日期时间的最佳方法?

MYSQL Datetime 获取一个月前的日期提取

php - Laravel 模型的多列 "pivot"表查询

Java:向现有类添加字段和方法?

java - 字符串常量池机制

java - 从哪里获得 JDK 8 for Windows 的 Fastdebug/Debug 版本?

tomcat - 如何在 Tomcat 中存储简单的自定义设置