在StrutsTest中使用Tomcat数据源

lujun1985 2007-07-26 11:29:40
在做Struts的单元测试时我是使用的StrutsTest作为JUnit的扩展。
但是在测试Action时会去访问数据库,而我的数据库是使用的Tomcat配置的数据源。
这样就会出现一个异常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
如何加载Tomcat的配置文件,并且使用Tomcat数据源呢?


测试代码:
package com.xxxxxx.prework.actions;

import java.io.File;

import servletunit.struts.MockStrutsTestCase;

public class TestLoginAction extends MockStrutsTestCase {

@Override
protected void setUp() throws Exception {
super.setUp();
File contextFile = new File(
"C:\\eclipse\\eclipse europa\\workspace\\Prework\\WebContent");
this.setContextDirectory(contextFile);
}

@Override
protected void tearDown() throws Exception {
super.tearDown();
}

public TestLoginAction(String testName) {
super(testName);
}

public void testSuccessfulLogin() {
this.setRequestPathInfo("/loginAction");
this.addRequestParameter("loginId", "admin");
this.addRequestParameter("password", "admin");
this.actionPerform();
this.verifyForward("menu");
this.verifyForwardPath("/jsp/Menu.jsp");
}
}


数据库访问代码:
public Connection getConnection() {
try {
Context initialContext = new InitialContext();
Context envContext = (Context) initialContext
.lookup("java:/comp/env");
DataSource dataSource = (DataSource) envContext
.lookup("OracleDAOFactory.DATASOURCE_DB_NAME");
dbConn = dataSource.getConnection();
} catch (NamingException e) {
logger.error("Database::Can not find datasource");
e.printStackTrace();
} catch (SQLException e) {
logger.error("Database::Can not get Connection");
e.printStackTrace();
}
return dbConn;
}


感觉这个问题挺麻烦的,因为数据源是需要Tomcat启动之后创建,而在做测试的时候是使用的Mock,并没有启动Tomcat~~~不知道有没有什么好的解决办法。
或者说有什么其他好的办法来测试Struts的Action

顺便说一下,我是是用的Struts 1.x
...全文
284 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lujun1985 2007-07-26
  • 打赏
  • 举报
回复
“就是用mock来模拟你的dao,你是单体测试不是结合测试,不需要真正的和数据库进行交互。
网上有mock工具,你自己找一下吧。”

哦~~~
谢谢~~
flyforlove 2007-07-26
  • 打赏
  • 举报
回复
就是用mock来模拟你的dao,你是单体测试不是结合测试,不需要真正的和数据库进行交互。
网上有mock工具,你自己找一下吧。
lujun1985 2007-07-26
  • 打赏
  • 举报
回复
"你需要测试连接池么,不需要的话,直接使用一般的Connection就可以了."
那岂不是得另写一套DAO出来~~
感觉挺麻烦的~~
lujun1985 2007-07-26
  • 打赏
  • 举报
回复
flyforlove(吾将远去)
你的意思就是说测试数据和测试Action两个之间要分开咯~
使用Mock来模拟数据吗?
那能推荐点这方面的书籍或文章吗?
刚开始学习测试,还不太熟悉这方面的东西~~
IhaveGotYou 2007-07-26
  • 打赏
  • 举报
回复
你需要测试连接池么,不需要的话,直接使用一般的Connection就可以了.
flyforlove 2007-07-26
  • 打赏
  • 举报
回复
你需要测试数据么?不需要为什么要链接数据库?
使用mock。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧