![JAR search and dependency download from the Maven repository](/logo.png)
enhanced.mybaits.generator.codegen.extra.SimpleJavaClientTestsGenerator Maven / Gradle / Ivy
The newest version!
package enhanced.mybaits.generator.codegen.extra;
import enhanced.mybaits.generator.EnhanceConstant;
import enhanced.mybaits.generator.MixedContext;
import enhanced.mybaits.generator.codegen.AbstractMethodGenerator;
import enhanced.mybaits.generator.codegen.AbstratEnhanceJavaGenerator;
import enhanced.mybaits.generator.codegen.IEnhanceCommentGenerator;
import enhanced.mybaits.generator.dom.java.TestsClass;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.generator.api.CommentGenerator;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.api.dom.java.JavaVisibility;
import java.util.ArrayList;
import java.util.List;
/**
* 简单的Java Client 测试类生成器
* @author 徐明龙 XuMingLong
*/
public class SimpleJavaClientTestsGenerator extends AbstratEnhanceJavaGenerator{
public SimpleJavaClientTestsGenerator(String project,MixedContext mixedContext) {
super(project,mixedContext);
}
/**
* 生成测试类
* @author 徐明龙 XuMingLong
* @return Java Client 测试类
*/
@Override
public List getCompilationUnits() {
List answer = new ArrayList();
//获取Java Client测试类
TestsClass testsClass = getJavaClientTests();
answer.add(testsClass);
return answer;
}
/**
* 获取Java Client 测试类
* @author 徐明龙 XuMingLong
* @return Java Client 测试类
*/
protected TestsClass getJavaClientTests() {
progressCallback.startTask(String.format("准备生成表%s的Mapper测试代码", introspectedTable.getFullyQualifiedTable().toString()));
CommentGenerator commentGenerator = context.getCommentGenerator();
IEnhanceCommentGenerator enhanceCommentGenerator = null ;
if(commentGenerator instanceof IEnhanceCommentGenerator) {
enhanceCommentGenerator = (IEnhanceCommentGenerator) commentGenerator;
}
FullyQualifiedJavaType type = new FullyQualifiedJavaType(calculateJavaClientTestsClassName());
TestsClass testsClass = new TestsClass(type);
testsClass.setVisibility(JavaVisibility.PUBLIC);
mixedContext.setTestsClass(testsClass);
//增加注释
commentGenerator.addJavaFileComment(testsClass);
if(enhanceCommentGenerator!=null) {
enhanceCommentGenerator.addMapperTestsClassComment(testsClass, introspectedTable);
}
//增加引入
testsClass.addStaticImport("org.assertj.core.api.Assertions.assertThat");
testsClass.addImportedType("java.util.List");
testsClass.addImportedType("org.junit.jupiter.api.extension.ExtendWith");
testsClass.addImportedType("org.springframework.beans.factory.annotation.Autowired");
testsClass.addImportedType("org.springframework.boot.test.context.SpringBootTest");
testsClass.addImportedType("org.springframework.test.context.junit.jupiter.SpringExtension");
testsClass.addImportedType("org.springframework.test.context.web.WebAppConfiguration");
testsClass.addImportedType("org.springframework.transaction.annotation.Transactional");
testsClass.addImportedType("lombok.extern.slf4j.Slf4j");
String testSpringBootMainClass = calculateSpringBootTestClass();
FullyQualifiedJavaType mainClass = new FullyQualifiedJavaType(testSpringBootMainClass);
testsClass.addImportedType(testSpringBootMainClass);
FullyQualifiedJavaType mapperClassType = mixedContext.getMapper().getType();
testsClass.addImportedType(mapperClassType);
FullyQualifiedJavaType recordClassType = mixedContext.getBaseRecord().getType();
testsClass.addImportedType(recordClassType);
//增加注解
testsClass.addAnnotation("@ExtendWith(SpringExtension.class)");
testsClass.addAnnotation(String.join("", "@SpringBootTest(classes = ",mainClass.getShortName(),".class)"));
testsClass.addAnnotation("@WebAppConfiguration");
testsClass.addAnnotation("@Transactional");
testsClass.addAnnotation("@Slf4j");
//增加Mapper的引入
Field field = new Field(StringUtils.uncapitalize(mapperClassType.getShortName()),mapperClassType);
field.addAnnotation("@Autowired");
if(enhanceCommentGenerator!=null) {
enhanceCommentGenerator.addAutowiredMapperFieldComment(field, introspectedTable);
}
field.setVisibility(JavaVisibility.PRIVATE);
testsClass.addField(field);
//增加测试方法
addInsertTestMethod();
return testsClass;
}
/**
* 增加测试Insert方法
* @author 徐明龙 XuMingLong
*/
protected void addInsertTestMethod() {
AbstractMethodGenerator methodGenerator = new TestsInsertMethodGenerator(mixedContext);
initializeAndExecuteGenerator(methodGenerator);
}
/**
* 初始化并执行生成器
* @author 徐明龙 XuMingLong
* @param methodGenerator 方法生成器
*/
protected void initializeAndExecuteGenerator(AbstractMethodGenerator methodGenerator) {
methodGenerator.setContext(context);
methodGenerator.setIntrospectedTable(introspectedTable);
methodGenerator.setProgressCallback(progressCallback);
methodGenerator.setWarnings(warnings);
methodGenerator.addMethod();
}
/**
* 计算Java Client 测试类名称
* @author 徐明龙 XuMingLong
* @return Java Client 测试类名称
*/
protected String calculateJavaClientTestsClassName() {
StringBuilder sb = new StringBuilder();
sb.append(calculateJavaClientTestsPackage());
sb.append('.');
sb.append(this.mixedContext.getMapper().getType().getShortName());
sb.append("Tests");
return sb.toString();
}
/**
* 计算Java Client测试类的Package
* @author 徐明龙 XuMingLong
* @return Java Client测试类的Package
*/
protected String calculateJavaClientTestsPackage() {
return this.context
.getJavaClientGeneratorConfiguration()
.getProperty(EnhanceConstant.EXTRA_TEST_CLIENT_TARGET_PACKAGE_KEY);
}
/**
* 计算Spring Boot Test启动类
* @author 徐明龙 XuMingLong
* @return Spring Boot Test启动类
*/
protected String calculateSpringBootTestClass() {
return this.context
.getJavaClientGeneratorConfiguration()
.getProperty(EnhanceConstant.EXTRA_TEST_SPRING_BOOT_MAIN_CLASS_KEY);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy