我必须将测试从 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/