- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 J2EE 应用程序中的 DAO 类编写一些测试用例。我的 DAO 类中的方法尝试根据 JDBC URL(位于应用程序服务器上)连接到数据库。所以从前端,如果我点击一堆东西并让 DAO 触发它运行良好。但是,当我为 DAO 编写测试用例并且 DAO 对象调用该方法时,它无法获得与数据库的连接。我认为由于 JDBC 资源在 App 服务器上,这就是它不能从测试类工作的原因。
因此,当我运行测试而不是通过或失败时..它返回一堆错误。
有人遇到过这个问题吗?我能做些什么来克服这个?
例子:
public class DBConnectionManager {
public static final String DB_URL = "jdbc/RSRC/my/connection/mydb"
public Connection getconnection ()
{
DataSource ds = ServiceLocator.getInstance().getDataSource(DB_URL);
return ds.getconnection();
}
}
public class MyDAO extends DBConnectionManager {
publci SomeBean getContents (String id)
{
Connection con = getConnection();
CallableStatement cs = con.prepareCall("{call myStorProc(?)}");
cs.setString(1, id);
...
//code to call resultset and retrieve SomeBean goes here
..
return SomeBean;
}
}
public class MyTests extends TestCase {
public testGetcontents ()
{
MyDAO myd = new MyDAO ();
SomeBean smb = myd.getContents("someparm");
assertEquals (5, smb.getSomeVal());
}
}
java.lang.NoClassDefFoundError: com/iplanet/ias/admin/common/ASException
at java.lang.ClassLoader.defineClass1(Native Method)
最佳答案
您的 DAO 有一个硬连接到其中的 JNDI 查找字符串。除非您有可用的 JNDI 查找服务,否则它将无法获得连接。
我认为 DAO 不应该负责获取数据库连接。这种设计不允许你为一个工作单元设置事务,因为 DAO 无法知道它是否是更大工作单元的一部分。
我建议将连接传递到 DAO,也许传递到它的构造函数。如果单个工作单元中有多个 DAO,那么服务层可以建立适当的事务边界。
这种设计的额外好处是,您的应用程序可以适本地使用其 JNDI 资源,并且您的测试可以从 DriverManager 获取其连接,而无需使用 JNDI 查找。您有两个不同的来源来获取 DataSource 或 Connection - 一个用于应用程序,另一个用于测试。
更新:
这就是我的意思,用您的代码表示:
public class DBConnectionManager
{
public static final String DB_URL = "jdbc/RSRC/my/connection/mydb"
public Connection getConnection (String jndiLookup)
{
DataSource ds = ServiceLocator.getInstance().getDataSource(jndiLookup);
return ds.getconnection();
}
public Connection getConnection(String driver, String url, String username, String password)
throws ClassNotFoundException, SQLException
{
Class.forName(driver);
return DriverManager.getConnection(url, username, password);
}
}
public class MyDAO
{
private Connection connection;
public MyDao(Connection connection)
{
this.connection = connection;
}
public SomeBean getContents (String id)
{
CallableStatement cs = this.connection.prepareCall("{call myStorProc(?)}");
this.connection.setString(1, id);
//code to call resultset and retrieve SomeBean goes here
return someBean;
}
}
关于java - 在 J2ee 应用程序上为 DAO 编写测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1698212/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!