serviceTest.vm 6.71 KB
Newer Older
lanbaoming's avatar
lanbaoming committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
package ${basePackage}.module.${table.moduleName}.service.${table.businessName};

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;

import javax.annotation.Resource;

import ${basePackage}.module.${table.moduleName}.test.BaseDbUnitTest;## 每个项目,默认有一个基础 DB Test 基类

import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*;
import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO;
import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper;
import ${PageResultClassName};

import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;

import static cn.hutool.core.util.RandomUtil.*;
import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*;
import static ${baseFrameworkPackage}.test.core.util.AssertUtils.*;
import static ${baseFrameworkPackage}.test.core.util.RandomUtils.*;
import static ${ObjectUtilsClassName}.*;
import static ${DateUtilsClassName}.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;

## 字段模板
#macro(getPageCondition $VO)
       // mock 数据
       ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class, o -> { // 等会查询到
       #foreach ($column in $columns)
       #if (${column.listOperation})
       #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写
           o.set$JavaField(null);
       #end
       #end
       });
       ${classNameVar}Mapper.insert(db${simpleClassName});
       #foreach ($column in $columns)
       #if (${column.listOperation})
       #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写
       // 测试 ${column.javaField} 不匹配
       ${classNameVar}Mapper.insert(cloneIgnoreId(db${simpleClassName}, o -> o.set$JavaField(null)));
       #end
       #end
       // 准备参数
       ${sceneEnum.prefixClass}${table.className}${VO} reqVO = new ${sceneEnum.prefixClass}${table.className}${VO}();
       #foreach ($column in $columns)
       #if (${column.listOperation})
       #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写
       #if (${column.listOperationCondition} == "BETWEEN")## BETWEEN 的情况
       reqVO.setBegin${JavaField}(null);
       reqVO.setEnd${JavaField}(null);
       #else
       reqVO.set$JavaField(null);
       #end
       #end
       #end
#end
/**
* {@link ${table.className}ServiceImpl} 的单元测试类
*
* @author ${table.author}
*/
@Import(${table.className}ServiceImpl.class)
public class ${table.className}ServiceImplTest extends BaseDbUnitTest {

    @Resource
    private ${table.className}ServiceImpl ${classNameVar}Service;

    @Resource
    private ${table.className}Mapper ${classNameVar}Mapper;

    @Test
    public void testCreate${simpleClassName}_success() {
        // 准备参数
        ${sceneEnum.prefixClass}${table.className}CreateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}CreateReqVO.class);

        // 调用
        ${primaryColumn.javaType} ${classNameVar}Id = ${classNameVar}Service.create${simpleClassName}(reqVO);
        // 断言
        assertNotNull(${classNameVar}Id);
        // 校验记录的属性是否正确
        ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(${classNameVar}Id);
        assertPojoEquals(reqVO, ${classNameVar});
    }

    @Test
    public void testUpdate${simpleClassName}_success() {
        // mock 数据
        ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class);
        ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据
        // 准备参数
        ${sceneEnum.prefixClass}${table.className}UpdateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}UpdateReqVO.class, o -> {
            o.setId(db${simpleClassName}.getId()); // 设置更新的 ID
        });

        // 调用
        ${classNameVar}Service.update${simpleClassName}(reqVO);
        // 校验是否更新正确
        ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(reqVO.getId()); // 获取最新的
        assertPojoEquals(reqVO, ${classNameVar});
    }

    @Test
    public void testUpdate${simpleClassName}_notExists() {
        // 准备参数
        ${sceneEnum.prefixClass}${table.className}UpdateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}UpdateReqVO.class);

        // 调用, 并断言异常
        assertServiceException(() -> ${classNameVar}Service.update${simpleClassName}(reqVO), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS);
    }

    @Test
    public void testDelete${simpleClassName}_success() {
        // mock 数据
        ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class);
        ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据
        // 准备参数
        ${primaryColumn.javaType} id = db${simpleClassName}.getId();

        // 调用
        ${classNameVar}Service.delete${simpleClassName}(id);
       // 校验数据不存在了
       assertNull(${classNameVar}Mapper.selectById(id));
    }

    @Test
    public void testDelete${simpleClassName}_notExists() {
        // 准备参数
        ${primaryColumn.javaType} id = random${primaryColumn.javaType}Id();

        // 调用, 并断言异常
        assertServiceException(() -> ${classNameVar}Service.delete${simpleClassName}(id), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS);
    }

    @Test
    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
    public void testGet${simpleClassName}Page() {
       #getPageCondition("PageReqVO")

       // 调用
       PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(reqVO);
       // 断言
       assertEquals(1, pageResult.getTotal());
       assertEquals(1, pageResult.getList().size());
       assertPojoEquals(db${simpleClassName}, pageResult.getList().get(0));
    }

    @Test
    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
    public void testGet${simpleClassName}List() {
       #getPageCondition("ExportReqVO")

       // 调用
       List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(reqVO);
       // 断言
       assertEquals(1, list.size());
       assertPojoEquals(db${simpleClassName}, list.get(0));
    }

}