当前位置: 首页 > 知识库问答 >
问题:

Junit 5套件不运行@BeforeAll和@AfterAll

蓝夕
2023-03-14

我有一个简单的 Junit 5 Siute,带有@BeforeAll和@AfterAll注释。执行套件,但这些方法不会在执行所有类之前和之后执行。

package demo;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasses({ demo.TestDemoClass1.class, demo.TestDemoClass2.class })

public class TestSuite {

    @BeforeAll
    public static void start() throws Exception {
        System.out.println("Before All from Suite1");
    }

    @AfterAll
    public static void end() throws Exception {
        System.out.println("After All from Suite1");
    }
}`

共有1个答案

洪俊拔
2023-03-14

< code>@BeforeAll表示应在当前类中的所有< code>@Test 、< code>@RepeatedTest 、< code>@ParameterizedTest和< code>@TestFactory方法之前执行带注释的方法。类似于JUnit 4的@BeforeClass。这种方法是继承的(除非它们被隐藏或覆盖),并且必须是静态的(除非使用“每类”测试实例生命周期)。

同样的故事也适用于@AfterAll因此请考虑将 start() 和 end() 方法移动到 TestDemoClass1TestDemoClass2 类,或者将测试类扩展到某些基类并将此方法保留在其中。

public class BaseTest {

    @BeforeAll
    public static void start() throws Exception {
        System.out.println("Before All from Suite1");
    }

    @AfterAll
    public static void end() throws Exception {
        System.out.println("After All from Suite1");
    }
}

和你的测试类

public class SampleTestOne extends BaseTest {
    @Test
    public void testOne(){
        System.out.println("Extended test passed!");
    }

    @Test
    public void testTwo(){
        System.out.println("Extended test passed!");
    }
}
public class SampleTestTwo extends SampleTestOne {
    @Test
    public void testThree(){
        System.out.println("test passed");
    }
}

或者,你可以创建自定义的扩展来在你的所有测试上下文之前运行代码,这在这里有完整的解释。

 类似资料:
  • 最近,我将Cucumberinfo.cukes迁移到io.cucumber,将Junit4迁移到Junit5,因为执行不适用于我的java版本。 我的主页 我的Pom

  • 有一种方法可以运行junit测试,只需在“mvn clean install”命令中添加参数?没有使用@Profile注释测试。

  • 我有一个测试类,里面有多个嵌套的测试类。外部测试类使用实现BeforeAllCallback和AfterAllCallback的扩展。在执行外部测试类时,为每个嵌套类调用这些接口的方法。这是意料之中的行为吗?我找不到任何明确说明这一点的文档。 导致输出:

  • 我在下面贴了一个简单的代码,为什么@BeforeAll带注释的方法和静态块在参数化测试之后运行?在这种情况下,我如何在Junit5中加载参数化测试之前注册一个公共对象或数据库连接,或者利用@BeforeAll或static block的功能。(参考:Junit4中参数化测试的等效代码在所有测试之前运行静态块。但不是@BeforeClass注释方法。) utils init() 正在清理。。。 ut

  • 我正在使用maven运行我的集成测试,这些测试在TestNG套件中。在Eclipse下运行套件时--我的测试套件运行成功。当运行“mvn verify”来运行我的集成测试时,我看到failsafe插件配置调试打印,其中包括suite.xml文件和我编译的类的正确路径,但它没有执行我的测试(构建过程成功完成)。 我尝试过运行相同的pom配置,但是使用了surefire插件而不是failsafe插件,

  • 我想在同一个项目中运行spock和junit5测试。因此,我制作了一个示例项目,在src/main下没有任何内容,但在src/test/java/a/package/下有两个测试。其中一个测试是junit5,另一个是spock测试。 但是在发出之后,只执行JUnit测试,而不执行spock测试。它们通过“运行所有测试”在Intellij中很好地一起运行,所以显然有一些我找不到的配置问题。 下面是我