在所有其他测试之前运行一次特定的JUnit测试

在所有其他测试之前运行一次特定的JUnit测试,junit,Junit,我正在用JUnit自动化一些检查。几乎所有这些都要求用户登录。我已经有了一个执行登录操作的@Test,但是我如何指示JUnit在所有其他测试之前只执行一次登录 我知道可以使用@BeforeClass,但这意味着我需要为以后的每节课调用它。JUnit4 您只能使用一个测试创建父类。并从中扩展所有类 private static final AtomicBoolean REQUIRES_LOGIN = new AtomicBoolean(true); @Test void setup() {

我正在用JUnit自动化一些检查。几乎所有这些都要求用户登录。我已经有了一个执行登录操作的
@Test
,但是我如何指示JUnit在所有其他测试之前只执行一次登录


我知道可以使用
@BeforeClass
,但这意味着我需要为以后的每节课调用它。

JUnit4

您只能使用一个测试创建父类。并从中扩展所有类

private static final AtomicBoolean REQUIRES_LOGIN = new AtomicBoolean(true);

 @Test
 void setup() {
   if (REQUIRES_LOGIN.getAndSet(false)) {
     System.out.println("Doing login here");
   }
 }
JUNIT 5

您可以在以下文件中注册全局扩展名

META-INF/services/org.junit.jupiter.api.extension.Extension
demo.api.BeforeAllExtension
扩展类:

public class BeforeAllExtension implements BeforeAllCallback {

     private static final AtomicBoolean REQUIRES_LOGIN = new AtomicBoolean(true);

    @Override
    public void beforeAll(ExtensionContext extensionContext) {
        if (REQUIRES_LOGIN.getAndSet(false)) {
            System.out.println("Doing login here");
        }
    }
}

查看如何打开扩展注册JUNIT 4

您只能使用一个测试创建父类。并从中扩展所有类

private static final AtomicBoolean REQUIRES_LOGIN = new AtomicBoolean(true);

 @Test
 void setup() {
   if (REQUIRES_LOGIN.getAndSet(false)) {
     System.out.println("Doing login here");
   }
 }
JUNIT 5

您可以在以下文件中注册全局扩展名

META-INF/services/org.junit.jupiter.api.extension.Extension
demo.api.BeforeAllExtension
扩展类:

public class BeforeAllExtension implements BeforeAllCallback {

     private static final AtomicBoolean REQUIRES_LOGIN = new AtomicBoolean(true);

    @Override
    public void beforeAll(ExtensionContext extensionContext) {
        if (REQUIRES_LOGIN.getAndSet(false)) {
            System.out.println("Doing login here");
        }
    }
}

检查如何打开扩展注册

您检查过这个吗答案:据我所知,链接的问题是关于同一类中的所有测试。但是,我正在寻找在所有其他类中的所有其他测试之前运行测试的东西。我认为您不能在几个单元测试类之间共享“登录”状态,因此如果您的单元测试需要登录到您的应用程序,您应该在每个测试中使用
@BeforeClass
。如果您的所有JUnit测试都需要登录,也许您应该考虑编写更多的单元测试,而不是集成测试(启用了安全提供程序)。您使用的是哪种安全框架?您是否检查过这个答案:据我所知,链接的问题是关于同一类中的所有测试。但是,我正在寻找在所有其他类中的所有其他测试之前运行测试的东西。我认为您不能在几个单元测试类之间共享“登录”状态,因此如果您的单元测试需要登录到您的应用程序,您应该在每个测试中使用
@BeforeClass
。如果您的所有JUnit测试都需要登录,也许您应该考虑编写更多的单元测试,而不是集成测试(启用了安全提供程序)。您使用的是哪种安全框架?