在SpringMVC项目中遇到定时任务的开发工作,需要对定时任务进行单元测试,使用Junit,在任务类上使用@Test标签执行Debug As Junit时控制台总报空指针错误,后来发现是因为Spring容器在这样的单元测试情况下不会去加载容器里面的类,所以导致即使在任务类中使用@Autowired标签自动注入也是无用的;必须使用其他方式将Spring容器中的bean在单元测试的时候就加载进来
后使用方法如下:
package com.ezendai.credit2.job.task;
import java.util.Date;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import com.ezendai.credit2.after.service.RemainingPrincipalCarService;
import com.ibm.icu.text.SimpleDateFormat;
/**
* 车贷剩余本金明细表
*
* @author rencq
* @version 1.0, 2016-07-08
* @since 1.0
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationMainContext.xml")
public class RemainingPrincipalDetaiCarTask {
@Autowired
private RemainingPrincipalCarService remainingPrincipalCarService;
private static final Logger logger = Logger.getLogger(CancelLoanTask.class);
@Transactional
@Test
public void execute(){
int insertNum= 0;
int delCount = 0;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String sysDate = sdf.format(new Date());
logger.info("删除ares_remain_cap_detail当日数据开始....");
// String deleteSql = "delete from ares_credit2_remain_cap_detail where to_char(statis_date,'yyyy-mm-dd') = '" + sysDate+ "'";
delCount = remainingPrincipalCarService.executeDelMethod(sysDate);
logger.info("删除ares_remain_cap_detail当日数据"+delCount+"条");
logger.info("车企贷剩余本金明细表导入开始.....");
//插入数据 主业务
remainingPrincipalCarService.addAresRemainPrincDetails();
//插入数据 展期业务
remainingPrincipalCarService.addAresRemainPrincDetailsExt();
//插入数据 展期合同签订
remainingPrincipalCarService.addAresRemainPrincDetailsExtSign();
//插入企贷剩余本金明细数据
remainingPrincipalCarService.addAresCompanyRemainPrincDetails();
insertNum = remainingPrincipalCarService.getCount(sysDate);
logger.info("ares_remain_cap_detail表导入结束,共"+insertNum+"条。");
// ClientCallBack.updateJobState(TaskUtil.JOB_RUN_STATE_FINSH, "", log);
} catch (Exception e) {
// ClientCallBack.updateJobState(TaskUtil.JOB_RUN_STATE_ERROR, "任务报错:" + e.getMessage(), log);
logger.error("ares_extension_info表导入出错,错误信息:"+e.getMessage());
e.printStackTrace();
}
}
}
重点代码为;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationMainContext.xml")
此处如果使用这种方式进行单元测试,则必须引用Spring的单元测试jar包,且必须为Spring3以后的版本才支持此单元测试功能
在maven配置文件pom.xml加入配置引入测试jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${version.spring}</version>
</dependency>
便可进行单元测试

559

被折叠的 条评论
为什么被折叠?



