serviceTest.vm 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package ${basePackage}.module.${table.moduleName}.service.${table.businessName};
  2. import org.junit.jupiter.api.Disabled;
  3. import org.junit.jupiter.api.Test;
  4. import org.springframework.boot.test.mock.mockito.MockBean;
  5. import javax.annotation.Resource;
  6. import ${baseFrameworkPackage}.test.core.ut.BaseDbUnitTest;
  7. import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*;
  8. import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO;
  9. import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper;
  10. import ${PageResultClassName};
  11. import javax.annotation.Resource;
  12. import org.springframework.context.annotation.Import;
  13. import java.util.*;
  14. import java.time.LocalDateTime;
  15. import static cn.hutool.core.util.RandomUtil.*;
  16. import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*;
  17. import static ${baseFrameworkPackage}.test.core.util.AssertUtils.*;
  18. import static ${baseFrameworkPackage}.test.core.util.RandomUtils.*;
  19. import static ${LocalDateTimeUtilsClassName}.*;
  20. import static ${ObjectUtilsClassName}.*;
  21. import static ${DateUtilsClassName}.*;
  22. import static org.junit.jupiter.api.Assertions.*;
  23. import static org.mockito.Mockito.*;
  24. ## 字段模板
  25. #macro(getPageCondition $VO)
  26. // mock 数据
  27. ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class, o -> { // 等会查询到
  28. #foreach ($column in $columns)
  29. #if (${column.listOperation})
  30. #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写
  31. o.set$JavaField(null);
  32. #end
  33. #end
  34. });
  35. ${classNameVar}Mapper.insert(db${simpleClassName});
  36. #foreach ($column in $columns)
  37. #if (${column.listOperation})
  38. #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写
  39. // 测试 ${column.javaField} 不匹配
  40. ${classNameVar}Mapper.insert(cloneIgnoreId(db${simpleClassName}, o -> o.set$JavaField(null)));
  41. #end
  42. #end
  43. // 准备参数
  44. ${sceneEnum.prefixClass}${table.className}${VO} reqVO = new ${sceneEnum.prefixClass}${table.className}${VO}();
  45. #foreach ($column in $columns)
  46. #if (${column.listOperation})
  47. #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写
  48. #if (${column.listOperationCondition} == "BETWEEN")## BETWEEN 的情况
  49. reqVO.set${JavaField}(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
  50. #else
  51. reqVO.set$JavaField(null);
  52. #end
  53. #end
  54. #end
  55. #end
  56. /**
  57. * {@link ${table.className}ServiceImpl} 的单元测试类
  58. *
  59. * @author ${table.author}
  60. */
  61. @Import(${table.className}ServiceImpl.class)
  62. public class ${table.className}ServiceImplTest extends BaseDbUnitTest {
  63. @Resource
  64. private ${table.className}ServiceImpl ${classNameVar}Service;
  65. @Resource
  66. private ${table.className}Mapper ${classNameVar}Mapper;
  67. @Test
  68. public void testCreate${simpleClassName}_success() {
  69. // 准备参数
  70. ${sceneEnum.prefixClass}${table.className}CreateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}CreateReqVO.class);
  71. // 调用
  72. ${primaryColumn.javaType} ${classNameVar}Id = ${classNameVar}Service.create${simpleClassName}(reqVO);
  73. // 断言
  74. assertNotNull(${classNameVar}Id);
  75. // 校验记录的属性是否正确
  76. ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(${classNameVar}Id);
  77. assertPojoEquals(reqVO, ${classNameVar});
  78. }
  79. @Test
  80. public void testUpdate${simpleClassName}_success() {
  81. // mock 数据
  82. ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class);
  83. ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据
  84. // 准备参数
  85. ${sceneEnum.prefixClass}${table.className}UpdateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}UpdateReqVO.class, o -> {
  86. o.setId(db${simpleClassName}.getId()); // 设置更新的 ID
  87. });
  88. // 调用
  89. ${classNameVar}Service.update${simpleClassName}(reqVO);
  90. // 校验是否更新正确
  91. ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(reqVO.getId()); // 获取最新的
  92. assertPojoEquals(reqVO, ${classNameVar});
  93. }
  94. @Test
  95. public void testUpdate${simpleClassName}_notExists() {
  96. // 准备参数
  97. ${sceneEnum.prefixClass}${table.className}UpdateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}UpdateReqVO.class);
  98. // 调用, 并断言异常
  99. assertServiceException(() -> ${classNameVar}Service.update${simpleClassName}(reqVO), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS);
  100. }
  101. @Test
  102. public void testDelete${simpleClassName}_success() {
  103. // mock 数据
  104. ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class);
  105. ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据
  106. // 准备参数
  107. ${primaryColumn.javaType} id = db${simpleClassName}.getId();
  108. // 调用
  109. ${classNameVar}Service.delete${simpleClassName}(id);
  110. // 校验数据不存在了
  111. assertNull(${classNameVar}Mapper.selectById(id));
  112. }
  113. @Test
  114. public void testDelete${simpleClassName}_notExists() {
  115. // 准备参数
  116. ${primaryColumn.javaType} id = random${primaryColumn.javaType}Id();
  117. // 调用, 并断言异常
  118. assertServiceException(() -> ${classNameVar}Service.delete${simpleClassName}(id), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS);
  119. }
  120. @Test
  121. @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
  122. public void testGet${simpleClassName}Page() {
  123. #getPageCondition("PageReqVO")
  124. // 调用
  125. PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(reqVO);
  126. // 断言
  127. assertEquals(1, pageResult.getTotal());
  128. assertEquals(1, pageResult.getList().size());
  129. assertPojoEquals(db${simpleClassName}, pageResult.getList().get(0));
  130. }
  131. @Test
  132. @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
  133. public void testGet${simpleClassName}List() {
  134. #getPageCondition("ExportReqVO")
  135. // 调用
  136. List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(reqVO);
  137. // 断言
  138. assertEquals(1, list.size());
  139. assertPojoEquals(db${simpleClassName}, list.get(0));
  140. }
  141. }