基於spring和mybatis專案的JUnit測試用例的實現
阿新 • • 發佈:2018-11-10
主要目的:實現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>
最後測試結果(如下)新增成功,但是部分欄位未儲存成功,資料丟失問題,有空繼續補全