在 Netbeans 8.2 RC 中为我的 Web 项目运行 JUnit 测试时出现错误:需要在环境或系统属性中指定类



当我运行测试类时,它抛出了这个错误:

Testcase: testAddSpecialty(web.models.tblSpecialty.SpecialtyDAOTest):   Caused an ERROR
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
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
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at web.utils.DBHelpers.makeConnection(DBHelpers.java:25)
at web.models.tblSpecialty.SpecialtyDAO.addSpecialty(SpecialtyDAO.java:143)
at web.models.tblSpecialty.SpecialtyDAOTest.testAddSpecialty(SpecialtyDAOTest.java:39)

这是我的测试课

package web.models.tblSpecialty;
import org.junit.Test; 
import static org.junit.Assert.*;
public class SpecialtyDAOTest {
SpecialtyDAO dao = new SpecialtyDAO();
public SpecialtyDAOTest() {
} 
@Test
public void testAddSpecialty() throws Exception {
String name = "dentistry";
assertTrue(dao.addSpecialty(name));
}

这是我的SpecialtyDAO类,用于从数据库中获取数据

public boolean addSpecialty(String specialtyName) throws SQLException, NamingException {
Connection con = null;
PreparedStatement stm = null;
try {
con = DBHelpers.makeConnection();
if (con != null) {
String sql = "INSERT INTO tblSpecialty "
+ "(SpecialtyName) values(?)";
stm = con.prepareStatement(sql);
stm.setString(1, specialtyName);
int row = stm.executeUpdate();
if (row > 0) {
return true;
}
}
} finally {
if (stm != null) {
stm.close();
}
if (con != null) {
con.close();
}
}
return false;
}

我的项目在Tomcat服务器上运行良好,所以我认为这不是数据库连接错误。谁能帮我解决这个问题? 非常感谢

实际上你几乎自己给出了答案。

当您在 NetBeans 中执行测试时,您将在 tomcat(这是一个 servlet 容器)之外运行它。

但是您尝试测试的代码依赖于这样的 servlet 容器,因为它通过javax.namingakaJNDI检索数据库连接。这只是 servlet 容器提供给运行在其中的应用程序的组件的一部分。

因此,如果在 NetBeans 中运行测试,则整个环境不可用,因此测试无法通过JNDI查找数据库连接。

为了修复您的测试,您可以:

  1. 模拟DBHelpers.makeConnection()调用以返回您选择的数据库连接。
  2. 手动初始化JNDI或使用某种框架(如 Simple-JNDI)。
  3. 在 servlet 容器中运行测试。

相关内容

  • 没有找到相关文章

最新更新