在StrutsTest中使用Tomcat数据源
在做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
[解决办法]
你需要测试数据么?不需要为什么要链接数据库?
使用mock。
[解决办法]
你需要测试连接池么,不需要的话,直接使用一般的Connection就可以了.