我必须将测试从JUnit 4迁移到JUnit 5,我必须使用@Rule来设置EnvironmentVariables变量。在Junit 4中,为每个测试清除了变量,在JUnit 5中,我需要相同的行为,因为现在正在运行的测试是分别传递的,但是当我从类中运行所有测试时,第二个测试将失败,因为仍然具有相同的环境变量。我有:@Rule public final EnvironmentVariables environmentVariables = new EnvironmentVariables();@Testvoid method1(){...}@Testvoid method2(){...}我对Junit 5尚不熟悉,因此在此先感谢您的帮助
3 回答
![?](http://img1.sycdn.imooc.com/545863c10001865402200220-100-100.jpg)
富国沪深
TA贡献1790条经验 获得超9个赞
你有没有@Rule
JUnit 4中应做与Extension
在JUnit的5提供了一个非常紧密的功能
所以,你可以创建例如分机EnvironmentVariablesExtension
所执行你的逻辑@Rule
,并通过注释您的测试类使用它在你的单元测试(ES)@ExtendWith(EnvironmentVariablesExtension.class)
。
请注意,如果@Rule
在单个单元测试类中使用单个,则可以将此逻辑移入@BeforeEach
每次运行测试之前调用的lifecyle方法。
如果只有几个类setup
在单个项目中使用此类,则仍可以引入一个抽象基测试类,该抽象基测试类在@BeforeEach
方法中进行此设置,并使单元测试类继承自该基类。
的最大价值之一@Rule
是当您要为单元测试定义多个规则时,或者要在其他应用程序/项目中重用规则时。并非如此,不要像Extension
在JUnit5中那样引入它们并保持目前的简单性。
![?](http://img1.sycdn.imooc.com/545868190001d52602200220-100-100.jpg)
Qyouu
TA贡献1786条经验 获得超11个赞
我认为您的关键字存在问题final
。删除它,它应该可以工作,
尝试这样:
@Rule public EnvironmentVariables environmentVariables = new EnvironmentVariables();
final =定义只能分配一次的实体
所以从我的角度来看,这困扰着您。
添加回答
举报
0/150
提交
取消