Java單元測試編碼規範

包結構規範

    單元測試包結構和源碼結構必須保持一致,以下圖所示:java

    

文件命名規範

    單元測試文件名字是由「被測試文件名 + Test」組成,以下圖所示git

    

代碼編寫規範

   基礎單元測試類

    被各個單元測試繼承,代碼以下web

package com.cntest.su.demo;

import com.cntest.su.DemoApplication;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * Description: 基礎測試類
 * Date: 2018/3/7 14:23
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes =DemoApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public abstract class BaseTest {
}

   Controller單元測試規範

     Controller負責restful接口輸出,測試包括post接口和get接口spring

     接口測試參照如下代碼restful

package com.cntest.su.demo.controller;

import com.cntest.su.demo.BaseTest;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

/**
 * Description: controller test demo
 * Date: 2018/3/7 11:34
 */
public class DemoControllerTest extends BaseTest{

    //@Autowired
    private MockMvc mockMvc;

    @Autowired
    private WebApplicationContext wac;

    @Before
    public void setup(){
        //MockMvcBuilders使用構建MockMvc對象   (項目攔截器有效)
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();

        //單個類  攔截器無效
        // mockMvc = MockMvcBuilders.standaloneSteup(userController).build();

    }

    /**
     * test hi interface
     *
     * @throws Exception
     */
    @Test
    public void testHi() throws Exception {
        String name = "test";
        // 一、get查一下接口
        RequestBuilder request = get("/demo/hi").param("name", name);
        mockMvc.perform(request)
                .andExpect(status().isOk())
                .andExpect(content().string("hi:" + name));
    }
}

 

    Service單元測試規範

      service層負責業務邏輯的實現,單元測試規範參照如下代碼post

package com.cntest.su.demo.service;

import com.cntest.su.demo.BaseTest;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * Description: service unit test
 * Date: 2018/3/7 14:23
 */
public class DemoServiceTest extends BaseTest {

    @Autowired
    private DemoService demoService;

    @Test
    public void testHi(){
        String name = "test";
        Assert.assertEquals(demoService.hi(name), "hi:" + name);
    }
}

    Dao單元測試規範

      dao層負責數據的獲取,單元測試參照如下代碼單元測試

package com.cntest.su.demo.dao;

import com.cntest.su.demo.BaseTest;
import com.cntest.su.demo.entity.User;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;

/**
 * Description: demo dao test
 * Date: 2018/3/7 14:57
 */
@Transactional
public class UserDaoTest extends BaseTest {

    @Autowired
    private UserDao userDao;

    @Test
    @Rollback
    public void testGet() {
        userDao.insert(3, "AAA", 20);
        User u = userDao.getById(3);
        Assert.assertEquals(20, u.getAge().intValue());
        Assert.assertEquals("AAA", u.getName());
    }
}

 

源代碼地址:https://gitee.com/xszhangmin/unit_test_demo/tree/master測試

相關文章
相關標籤/搜索