java - 在 Junit5 中为每个测试设置环境变量

标签 java junit

我必须将测试从 JUnit 4 迁移到 JUnit 5,我有设置 EnvironmentVariables 变量的 @Rule。在 Junit 中,每个测试都清除了 4 个变量,在 JUnit 5 中,我需要相同的行为,因为现在正在运行的测试分别通过,但是当我从类运行所有测试时,第二个测试失败,因为仍然具有相同的环境变量。

我有:

@Rule
 public final EnvironmentVariables environmentVariables = new EnvironmentVariables();

@Test
void method1(){...}


@Test
void method2(){...}

我还不熟悉 Junit 5,所以在此先感谢您的帮助

最佳答案

您在 JUnit 4 中使用 @Rule 所做的应该使用 Extension 完成它在 JUnit 5 中提供了非常接近的功能。
因此,您可以创建一个扩展,例如 EnvironmentVariablesExtension,它执行您的 @Rule 的逻辑,并通过注释您的测试类 @ 在您的单元测试中使用它ExtendWith(EnvironmentVariablesExtension.class).

请注意,如果您在单个单元测试类中使用单个 @Rule,则可以将此逻辑移动到每次运行之前调用的 @BeforeEach 生命周期方法中测试。
如果您在单个项目中只有几个类使用此 setup,您仍然可以引入一个抽象基测试类,它在 @BeforeEach 方法中执行此设置,并使您的单元测试类继承自该基类。
@Rule 的最大值(value)之一是当您想要为单元测试定义多个规则时,或者当您想要在其他应用程序/项目中重用规则时。事实并非如此,不要拘泥于在 JUnit5 中将它们作为 Extension 引入,暂时保持简单。

关于java - 在 Junit5 中为每个测试设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51240711/

相关文章:

java - Java 是否有支持并发修改的数据结构?

java - 下载宠物护理应用程序,帮助运行它

MacOS 10.7.4 上的 Java 系统托盘图标不显示动画 gif

java - 反序列化EOF异常,序列化可能无法正确写入文件

java - SpringJUnit4ClassRunner 中的 spring @Conditional

junit - 如何使用 SBT 运行 JUnit 4.11 测试用例?

java - 我可以为每种不同类型的继承类拥有不同的静态变量副本吗

java - 模拟文件类和 NullPointerException

java - 如何纠正 junit 给出预期的断言错误 :1 and actual:0?

spring - 如何使用 JUnit 比较两个列表