【发布时间】:2021-05-05 15:02:18
【问题描述】:
我尝试测试我的 Dao 类,但它为 DbConnection 类返回此错误:
javax.naming.NoInitialContextException:需要在环境或系统属性中,或在应用程序资源文件中指定类名:java.naming.factory.initial 在 java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:691) 在 java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305) 在 java.naming/javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:342) 在 java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409) 在 model.DbConnection.(DbConnection.java:16) 在 model.DbConnection.getInstance(DbConnection.java:30) 在 model.ProfileManager.ReturnPatientByKey(ProfileManager.java:27) 在 model.ProfileManagerTest.testReturnPatientByKey(ProfileManagerTest.java:32) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:564) ……
我的 DbConnection 类:
package model;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class DbConnection {
private DbConnection() {
Context ctx;
try {
ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/CheckUpDb");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Connection getConnection() throws SQLException {
return ds.getConnection();
}
public static DbConnection getInstance () {
if(db==null) {
return new DbConnection();
}
else {
return db;
}
}
private static DataSource ds;
private static DbConnection db;
}
数据库连接在 Web 应用程序中有效,只有测试返回此错误。 我认为问题不在于我的 ProfileManager 类,因为它只是一个测试示例:
import static org.junit.Assert.assertTrue;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.mockito.Mockito.*;
import model.Bean.PatientBean;
class ProfileManagerTest{
private ProfileManager pm;
String fiscal_code;
String user_password;
PatientBean patient;
@BeforeEach
void setUp() throws Exception {
this.pm = new ProfileManager();
fiscal_code = "aaa";
user_password = "bbb";
patient = mock(PatientBean.class);
}
@AfterEach
void tearDown() throws Exception {
}
@Test
void testReturnPatientByKey() {
patient = (PatientBean) pm.ReturnPatientByKey(fiscal_code, user_password);
assertTrue(true);
}
}
【问题讨论】:
标签: java jdbc junit dbconnection