【问题标题】:Running a specific JUnit test once before all other tests在所有其他测试之前运行一次特定的 JUnit 测试
【发布时间】:2018-06-21 10:20:36
【问题描述】:

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

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

【问题讨论】:

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

标签: junit


【解决方案1】:

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

查看如何开启扩展注册here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2010-11-14
    相关资源
    最近更新 更多