首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

在StrutsTest中使用Tomcat数据源,该如何处理

2012-01-18 
在StrutsTest中使用Tomcat数据源在做Struts的单元测试时我是使用的StrutsTest作为JUnit的扩展。但是在测试A

在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就可以了.

热点排行