1. 程式人生 > >基於spring和mybatis專案的JUnit測試用例的實現

基於spring和mybatis專案的JUnit測試用例的實現

主要目的:實現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>

最後測試結果(如下)新增成功,但是部分欄位未儲存成功,資料丟失問題,有空繼續補全

這裡寫圖片描述