Junit 5- jupiter所有测试套件@BeforeAll @AfterAll不工作

unguejic  于 2022-11-11  发布在  其他
关注(0)|答案(3)|浏览(423)

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");
    }
}

我只是想前后跑的方法。
谢谢你

bnlyeluc

bnlyeluc1#

我可以引用JUnit 5迁移提示:
@Before@After不再存在;请改用@BeforeEach@AfterEach
@BeforeClass@AfterClass不再存在;请改用@BeforeAll@AfterAll
但是这些注解应该在测试类中使用。suite类中的方法不会以这种方式调用。而且您应该知道suites和JUnit 5仍在进行中(请参见Issue 744)。

zz2j4svz

zz2j4svz2#

在遇到同样的问题后,我遇到了这个问题,@AfterAll和@AfterEach注解的方法没有被调用。在我的例子中,问题是JUnit 4的一个不正确的导入潜入了我的测试类,我导入的是org.junit. jupiter. api.Test,而不是org.junit. jupiter. api. Test。一旦我修复了这个问题,我的注解方法就很高兴地被再次调用了。

gfttwv5a

gfttwv5a3#

您可能需要检查org.junit.jupiter:junit-jupiter-engine是否在您的类路径中。
但是,最新版本的构建工具(带有surefire插件的Maven、Gradle、Eclipse、IntelliJ等)支持junit-platform。因此,您不需要使用具有向后兼容运行器的JUnit 4。
通常你可以在下列情况下:

  • 创建新项目,在这种情况下,可以仅使用JUnit-Jupiter直接启动(类路径中不包含JUnit 4)
  • 将项目从JUnit 4迁移到JUnit 5。此处您需要两个引擎:JUnit-Vintage,它涵盖了使用JUnit 4 API的现有测试的回溯兼容性,以及JUnit-Jupiter,它提供了更大的灵活性,包括扩展的组合(例如,同时具有Spring、Mockito和参数化测试特性)

使用JUnit 4 runner来运行JUnit-Jupiter测试实际上是一种极端情况,当您受到无法更改的环境(构建工具和/或IDE)的约束时。
有关更多详细信息,请参考JUnit团队提供得示例项目:

希望这对你有帮助!

相关问题