serviceTest.vm 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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 jakarta.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 jakarta.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}SaveReqVO createReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class).setId(null);
  71. // 调用
  72. ${primaryColumn.javaType} ${classNameVar}Id = ${classNameVar}Service.create${simpleClassName}(createReqVO);
  73. // 断言
  74. assertNotNull(${classNameVar}Id);
  75. // 校验记录的属性是否正确
  76. ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(${classNameVar}Id);
  77. assertPojoEquals(createReqVO, ${classNameVar}, "id");
  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}SaveReqVO updateReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class, o -> {
  86. o.setId(db${simpleClassName}.getId()); // 设置更新的 ID
  87. });
  88. // 调用
  89. ${classNameVar}Service.update${simpleClassName}(updateReqVO);
  90. // 校验是否更新正确
  91. ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(updateReqVO.getId()); // 获取最新的
  92. assertPojoEquals(updateReqVO, ${classNameVar});
  93. }
  94. @Test
  95. public void testUpdate${simpleClassName}_notExists() {
  96. // 准备参数
  97. ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class);
  98. // 调用, 并断言异常
  99. assertServiceException(() -> ${classNameVar}Service.update${simpleClassName}(updateReqVO), ${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. ## 特殊:树表专属逻辑(树不需要分页接口)
  121. #if ( $table.templateType != 2 )
  122. @Test
  123. @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
  124. public void testGet${simpleClassName}Page() {
  125. #getPageCondition("PageReqVO")
  126. // 调用
  127. PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(reqVO);
  128. // 断言
  129. assertEquals(1, pageResult.getTotal());
  130. assertEquals(1, pageResult.getList().size());
  131. assertPojoEquals(db${simpleClassName}, pageResult.getList().get(0));
  132. }
  133. #else
  134. @Test
  135. @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
  136. public void testGet${simpleClassName}List() {
  137. #getPageCondition("ListReqVO")
  138. // 调用
  139. List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(reqVO);
  140. // 断言
  141. assertEquals(1, list.size());
  142. assertPojoEquals(db${simpleClassName}, list.get(0));
  143. }
  144. #end
  145. }