作者:谦谦骄子_458 | 来源:互联网 | 2023-01-09 15:55
我经常写不同类型的测试.根据测试类型,它可能有不同的设置.
例如,我的所有服务测试在类声明下都有以下注释:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvirOnment= NONE)
所有控制器测试都有这些注释:
@RunWith(SpringRunner.class)
@WithMockUser
@WebMvcTest(cOntrollers= MyController.class)
另一个测试有不同的设置等.
每当我创建测试时,我都必须从另一个测试中复制粘贴此部分.
我正在寻找一种能够帮助我在IntelliJ Idea中自动完成此过程的解决方案.
问:有没有办法JUnit Test Class
根据测试类型定义不同的模板?
假设类名以"Service"结尾 - 其生成的测试应使用一个模板,如果类名以"Controller"结尾 - 其测试应使用另一个,等等.
还可以通过包名称或类内容等一些其他条件来检测测试类型.
1> Rob Obdeijn..:
可以在"设置">"文件和代码模板">"代码"下找到JUnit代码生成模板.
您无法真正创建单独的代码模板,但您可以做的是向现有模板添加逻辑.他们使用基于Velocity的指令.因此,例如,如果我们采用现有的JUnit 4模板:
import static org.junit.Assert.*;
#parse("File Header.java")
public class ${NAME} {
${BODY}
}
我们可以将其修改为以下内容:
import static org.junit.Assert.*;
#if($CLASS_NAME.contains("Service"))
//Import whatever you need for services here.
#end
#if($CLASS_NAME.contains("Controller"))
//Import whatever you need for controllers here.
#end
#parse("File Header.java")
#if($CLASS_NAME.contains("Controller"))
#set($CLASS_SUFFIX = ".class" )
@RunWith(SpringRunner.class)
@RunWithMock
@WebMvcTest(cOntrollers= $CLASS_NAME$CLASS_SUFFIX)
#end
#if($CLASS_NAME.contains("Service"))
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvirOnment= NONE)
#end
public class ${NAME} {
${BODY}
}
这样,如果您通过上下文菜单生成一个新的JUnit 4测试类(在要测试的类的类名上按alt-enter并生成新测试),如果要测试的类的名称包含,则它将生成不同的输出'控制器'或'服务'.您可能希望将其更改为endswith而不是contains,具体取决于您使用的任何命名约定.在这两种情况下我都遗漏了实际的导入语句,但我相信你能够添加它们.