gpt4 book ai didi

java - IntelliJ 理念 : JUnit Test Class template depending on condition

转载 作者:行者123 更新时间:2023-11-29 06:51:26 25 4
gpt4 key购买 nike

我经常编写不同类型的测试。根据测试类型,它可能有不同的设置。

例如,我所有的服务测试在类声明下都有以下注释:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = NONE)

所有 Controller 测试都有这些注释:

@RunWith(SpringRunner.class)
@WithMockUser
@WebMvcTest(controllers = MyController.class)

另一个测试有不同的设置等

每次创建测试时,我都必须从另一个测试中复制粘贴这部分内容。

我正在寻找一种解决方案来帮助我在 IntelliJ Idea 中自动执行此过程。

问:有什么方法可以定义根据测试类型工作不同的 JUnit 测试类 模板?

假设类名以单词“Service”结尾——它生成的测试应该使用一个模板,如果类名以“Controller”结尾——它的测试应该使用另一个模板,等等。

也可以通过包名或类内容等其他条件来检测测试类型。

最佳答案

可以在“设置”>“文件和代码模板”>“代码”下找到 JUnit 代码生成模板。

您无法真正创建单独的代码模板,但您可以为现有模板添加逻辑。他们使用基于速度的指令。因此,例如,如果我们采用现有的 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 并生成新测试),它将生成不同的输出如果类名测试包含“ Controller ”或“服务”。您可能希望将其更改为 endswith 而不是 contains,具体取决于您使用的命名约定。在这两种情况下,我都省略了实际的导入语句,但我相信您可以添加它们。

关于java - IntelliJ 理念 : JUnit Test Class template depending on condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47202115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com