您的位置:首页 > 编程语言 > Java开发

基于spring和mybatis项目的JUnit测试用例的实现

2016-03-01 14:57 886 查看
主要目的:实现JUnit的Crud

项目目前情况:spring+mybatis

想在前后端分离的情况下,

后端实现各个模块CRUD的junit

遇到的最大问题先是注入之后提示nullPointException

接着很快反应过来

是junit运行单个文件的时候并没有在启动容器,也就是说单独执行一个文件没有初始化spring,也就无法使用service了

那么如何才能初始化spring呢?这就是这次junit中遇到的最大的问题

@Autowired

public static ProjectService projectService;

package test;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import project.dao.ProjectDao;
import project.dao.ProjectService;
import project.domain.Project;

import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

//import org.springframework.beans.factory.annotation.Autowired;

/**
* Created by san-pc on 2016/2/26.
*/
public class ProjectTestbeat1 {

/* @Autowired
public static ProjectDao projectDao;
*/
@Autowired
public static ProjectService projectService;
@BeforeClass
public static void init() {//junit之前init spring
ApplicationContext   context = new ClassPathXmlApplicationContext("classpath*:conf/root.xml");//这里路径之前没有配对于是一直出错
projectService = (ProjectService)context.getBean("projectService");
}
@Test
public  void addProject() throws Exception {
Project project = new Project();
project.setProjectName("七天通知贷");
project.setProjectCode("20151601032046");
project.setProjectType("通知贷");
project.setInterestDate(7);
project.setInterestRatio(0.0009);
project.setCompanyId(1);
project.setCompanyName("旺金控股公司");
project.setLinkmanId(Long.valueOf(16292 + ""));
project.setLinkmanName("胡二");
project.setCreateId(16309);
project.setCreaterName("罗星星");
project.setBudgetIncome(12000);
project.setBudgetExpenses(1000);
project.setRealExpenses(2000);
project.setCreateDate(new Date());//创建日期
project.setEditDate(new Date());//最后修改时间
project.setPstartDate(new Date());//竞标日期
project.setPfullDate(new Date());//满标日期
project.setPvalueDate(new Date());//起息日期
project.setPendDate(new Date());//回款日期
project.setPrealendDate(new Date());//实际回款日期
project.setRemark("测试数据");
project.setStateCode("0");
projectService.insertProject(project);
projectService.updateProject(project);

}

public static void main(String[] args){
try {
//   addProject();
} catch (Exception e) {
System.out.println("---------------------添加错误--------------------");
e.printStackTrace();
}
}
public Map<String, String> SELECT1(Map<String, String> b) {
return b;
}

// @Test
public static Map<String, Project> JSON2Map() {
System.out.println("shuchu");
Map<String, Project> map = new HashMap<String, Project>();
return map;
}
}


上面代码中的

ApplicationContext context = new ClassPathXmlApplicationContext(“classpath*:conf/root.xml”);//

大家一定觉得好奇了,因为我们的配置文件肯定不止一个,如何把spirng和spring-mvc以及其他xml引入呢?

这个时候就需要写一个类似web.xml的文件包含所有需要的配置文件了

即:root.xml



接着spring的初始化就算完成了

接着是测试mapping的crud

首先是测试insert

第一部分是基本配置
<mapper namespace="project.dao.ProjectDao">

<!--表名 -->
<sql id="table_name">project</sql>

<sql id="table_roles">staff_roles</sql>

<sql id="select_fields">
project_name,project_code, project_type, interest_date,interest_ratio,company_id,
company_name,linkman_id,linkman_name,create_id,creater_name,budget_income,
budget_expenses,real_expenses,create_date,edit_date,
pstart_date, pfull_date,pvalue_date,pend_date,prealend_date,remark,state_code
</sql>
<resultMap id="entityMap" type="project.domain.Project">
<result column="project_name" property="projectName"  />
<result column="project_code" property="projectCode" />
<result column="project_type" property="projectType" />
<result column="interest_date" property="interestDate" />
<result column="interest_ratio" property="interestRatio" />
<result column="company_id" property="companyId" />
<result column="company_name" property="companyName"  />
<result column="linkman_id" property="linkmanId" />
<result column="linkman_name" property="linkmanName" />
<result column="create_id" property="createId" />
<result column="creater_name" property="createrName" />
<result column="budget_income" property="budgetIncome" />
<result column="budget_expenses" property="budgetExpenses" />
<result column="real_expenses" property="realExpenses" />
<result column="create_date" property="createDate"  />
<result column="edit_date" property="editDate" />
<result column="pstart_date" property="updatedAt" />
<result column="pfull_date" property="operatorId" />
<result column="pvalue_date" property="pvalueDate" />
<result column="pend_date" property="pendDate"  />
<result column="prealend_date" property="prealendDate" />
<result column="remark" property="remark" />
<result column="state_code" property="stateCode" />
</resultMap>

第二部分是CRUD模块的实现
<!--新增-->
<!--keyProperty:指主键属性名,也是返回的数据
useGeneratedKeys:表示设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中->
<insert id="insertProject" parameterType="project.domain.Project" keyColumn="project_id" useGeneratedKeys="true" keyProperty="project_id">
INSERT INTO
<include refid="table_name"></include>
(
<include refid="select_fields" />
)
VALUES
(
#{projectName},#{projectCode},#{projectType},#{interestDate},#{interestRatio},#{companyId},
#{companyName},#{linkmanId},#{linkmanName},#{createId},#{createrName},#{budgetIncome},
#{budgetExpenses},#{realExpenses},#{createDate},#{editDate},
#{pstartDate},#{pfullDate},#{pvalueDate}, #{pendDate}, #{prealendDate},#{remark},
#{stateCode}
)
</insert>


最后测试结果(如下)新增成功,但是部分字段未保存成功,数据丢失问题,有空继续补全

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: