2017-04-07 65 views
5

@BeforeAll注释标记了在的所有测试之前运行的方法。在JUnit 5中,如何在所有测试之前运行代码

http://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations

但是,有没有办法运行所有测试之前的一些代码,在所有类?

我希望确保测试使用一组特定的数据库连接,以及运行任何测试这些连接的全球一次性设置必须发生之前。

+0

这个方法是什么? – davidxxx

+0

只是为了记录:如果您发现其中一个答案足够有用 - 请考虑在某些时候接受其中的一个答案;-) – GhostCat

回答

2

我不知道有这样做的意思。

我只是简单地确保@BeforeAll的所有代码调用某个单例来使这个init工作(可能以一种懒惰的方式来避免重复)。

可能不太方便...我看到的唯一的其他选项:我假设您的测试在特定的JVM作业中运行。你可能会挂接到一个JVM运行,这是否为你工作的初始工作agentagent

除此之外:这两个建议听起来有点像对我的黑客。 real回答我的眼睛:退后一步,仔细检查你的环境对它的依赖关系。然后找到一种方式来准备你的环境,以一种方式,你的测试出现,“正确的事情”自动发生。换句话说:考虑考虑购买你这个问题的架构。

1

您可以将每个使用数据库的测试类标记为定义了staticBeforeAll(以便它不能被覆盖)的接口。例如: -

interface UsesDatabase { 
    @BeforeAll 
    static void initializeDatabaseConnections() { 
     // initialize database connections 
    } 
} 

这个方法将每个实现类调用一次,所以你需要定义一个方法来初始化您的连接只有一次,然后什么也不做的其他呼叫。

相关问题