serviceTest.vm 6.7 KB

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