我们有一个基于Spring + Ibatis的J2EE应用程序.我计划用测试用例包围我们的DAO(通过获取spring bean来调用iBatis模板).我对JUnit没有多少经验,所以我认为只需创建一个DAO对象然后调用其中一个方法就可以了.但我错了,结果是整个J2EE应用程序在appserver(容器)上运行,但显然JUnit测试用例在容器之外.所以,在我的测试用例中,当我创建dao的对象并调用一个方法时......它在我的DAO方法中的这样的行上失败了
ApplicationInitializer.getApplicationContext().getBean("myMapclientBean");
Run Code Online (Sandbox Code Playgroud)
所以我进行了谷歌搜索......遇到了一些帖子,接下来我最后参加了Spring的4天培训课程.
想让你的家伙看到你对这门课程的看法?价格有价值吗?一个人也可以自己学习这些东西吗?通过几本书?(也许不会在4天内,但是,比如说,超过一个月).
哦,我仍然无法对这些DAO进行单元测试...> _ <
我问了一个问题,其标题可能会产生误导,所以我将尝试用更详细的东西再次提出这个问题.(我知道问题似乎很长但请耐心等待我)
我正在尝试做什么:我只是想为我的DAO编写测试用例并使其工作.我知道我的DAO在容器(app服务器)内工作正常但是从测试用例调用DAO时它不起作用.我认为因为它在容器之外.
在我的spring-for-iBatis.xml中填充
<bean id="IbatisDataSourceOracle" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/RSRC/my/db/oltp"/>
</bean>
<bean id="MapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sql-map-config-oracle.xml"/>
<property name="dataSource" ref="IbatisDataSourceOracle"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
在我的sql-map-config-oracle.xml中填充
<sqlMapConfig>
<settings enhancementEnabled="true" useStatementNamespaces="true" />
<transactionManager type="JDBC">
<dataSource type="JNDI">
<property name="DataSource" value="jdbc/RSRC/my/db/oltp"/>
</dataSource>
</transactionManager>
<sqlMap resource="mymapping.xml"/>
</sqlMapConfig>
Run Code Online (Sandbox Code Playgroud)
我的抽象类:
public abstract MyAbstract {
public SqlMapClientTemplate getSqlTempl() SQLException{
public static final String ORCL = "jdbc/RSRC/PIH/eiv/oltp";
try {
ApplicationInitializer.getApplicationContext().getBean("MapClient");
SqlMapClient scl = (SqlMapClient) ApplicationInitializer.getApplicationContext().getBean("MapClient");
DataSource dsc = (DataSource) MyServiceLocator.getInstance().getDataSource(ORCL);
return new SqlMapClientTemplate (dsc, scl);
}
catch (NamingException e)
{ …Run Code Online (Sandbox Code Playgroud)