Junit5-木星所有测试套件@BeforeAll @AfterAll 不工作

Posted

技术标签:

【中文标题】Junit5-木星所有测试套件@BeforeAll @AfterAll 不工作【英文标题】:Junit5- jupiter all tests suite @BeforeAll @AfterAll not working 【发布时间】:2019-09-09 13:42:12 【问题描述】:

before 和 after 方法在 JUnitPlatform 中不起作用。

代码如下。

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
@SelectClasses(
        MyControllerTest.class
)
public class AdminAppTest 

    @BeforeAll
    public static void setUp() 
        System.out.println("setting up");
    

    @AfterAll
    public static void tearDown() 
        System.out.println("tearing down");
    

我只想在方法之前和之后运行。

谢谢

【问题讨论】:

【参考方案1】:

我可以引用 JUnit 5 migration tipps:

@Before@After 不再存在;请改用@BeforeEach@AfterEach

@BeforeClass@AfterClass 不再存在;请改用@BeforeAll@AfterAll

但是这些注释应该在你的测试类中使用。您的套件类中的方法不会以这种方式调用。您应该知道,套件和 JUnit 5 仍在开发中(请参阅 Issue 744)。

【讨论】:

【参考方案2】:

您可能需要检查 org.junit.jupiter:junit-jupiter-engine 是否在您的 类路径中。

不过,最新版本的构建工具(带有 surefire 插件的 Maven、Gradle、Eclipse、IntelliJ 等)支持 junit-platform。因此,您不需要将 JUnit4 与向后兼容的运行器一起使用。

通常你可以在以下几种情况:

创建新项目,在这种情况下,您可以直接使用 JUnit-Jupiter 开始(并且在您的类路径中没有 JUnit4)

将项目从 JUnit4 迁移到 JUnit5。在这里,您将需要两个引擎:JUnit-Vintage,它涵盖了使用 JUnit4 API 对现有测试的追溯兼容性,以及 JUnit-Jupiter,它提供了更多的灵活性,包括扩展的组合(同时具有 Spring、Mockito 和参数化测试功能)例如时间)

当您受到无法更改的环境(构建工具和/或 IDE)的限制时,使用 JUnit4 运行程序运行 JUnit-Jupiter 测试确实是一种极端情况。

有关更多详细信息,JUnit 团队提供了示例项目:

Gradle project with JUnit-Jupiter Maven project with JUnit-Jupiter Maven project migrating from JUnit4 to JUnit5

希望这会有所帮助!

【讨论】:

类路径中不是还需要 org.junit.jupiter:junit-jupiter-api 吗? 当然可以,但它是junit-jupiter-engine的传递依赖。因此,如果您使用的是 Maven 或 Gradle 等常规构建工具,则不必担心。此外,现在我们使用 org.junit.jupiter:junit-jupiter 依赖项,它嵌入了所有与 jupiter 相关的依赖项,并且更像是您在 Spring-Boot 星系中可能找到的入门。在大多数情况下,不再需要对 jupiter-api 或 jupiter-engine 有显式依赖。 知道了。谢谢!

以上是关于Junit5-木星所有测试套件@BeforeAll @AfterAll 不工作的主要内容,如果未能解决你的问题,请参考以下文章

junit5常用注解

带有 @Suite 注释的 Junit5 测试套件不使用 mvn test 命令执行测试

测试套件在 JUnit5 中是不是被认为已弃用?

SpringBoot中的测试(test)

SpringBoot——单元测试之JUnit5

SpringBoot——单元测试之JUnit5