我在我的测试中使用了wiremock并且有这样一行代码:
@Rule
public WireMockRule wireMockRule = new WireMockRule(8080);
我想切换到Junit 5.所以我添加了下一个依赖项(使用gradle):
testCompile('org.junit.jupiter:junit-jupiter-engine:5.1.1')
但是当我尝试导入@Rule注释时没有任何建议.
我是否需要添加另一个junit依赖模块?或Junit5不支持规则?如果不是,我怎样才能更换@Rule注释以使测试再次起作用?
谢谢.
解决方法:
一般来说,你在JUnit 4中使用@Rule和@ClassRule所做的事情应该用@ExtendWith
和Extension
完成,它们在JUnit 5中提供了一个非常接近的特性.
它作为标准JUnit生命周期钩子工作,但它是在Extension类中提取的.与@Rule类似,可以为测试类添加所需的许多扩展.
要处理这个问题,您可以采用以下几种方法:
>保持JUnit 4方式(JUnit 5拥有允许执行JUnit 3或4测试的JUnit Vintage部分).
>将@Rule重写为扩展名.
>使用@BeforeEach和@AfterEach钩子方法在每个类测试中完成WireMockRule(启动服务器,执行测试并停止服务器)的实际处理.
>使用第三个库,它以JUnit 5 Extension方式实现等效的WireMockRule,例如https://github.com/lanwen/wiremock-junit5
请注意,您的问题已在the JUnit 5 Issues中讨论过.