有没有办法在 JUnit Jupiter
( Junit5
)中进行参数化测试?
我经历了How to write junit tests for interfaces?并希望使用JUnit5将测试用例实现为answered here . 但是在Jupiter包中找不到相同的类/ es .
进一步寻找替代品,我发现Extensions将取代@RunWith,如Migrating tips所述
@RunWith不再存在;被@ExtendWith取代 .
我尝试定义示例here - MockitoExtension中提供的 CustomExtension
但无法成功使用类 Parameterized 的实例 .
期待有关如何使用 JUnit5
中实现它的类的参数化实例测试接口的建议 .
4 回答
JUnit 5 M4刚刚发布,现在支持参数化测试 .
这是“Hello World”示例:
有关完整文档和其他示例,请参阅User Guide .
截至2017年1月9日,JUnit 5本身不支持参数化测试,但可以使用该功能is in progress . 请注意,您可以使用dynamic tests实现类似的功能 .
也就是说,我会考虑两种不好的方法来实现接口测试,而JUnit Jupiter提供了两种更好的方法:
@Test
带注释的接口默认方法will be executed . 因此,如果您有一个 生产环境 界面Interface
,您可以编写一个接口InterfaceTest
,它使用默认方法来测试您想要的所有内容 . 对于每个Impl implements Interface
,您可以写一个ImplTest implements InterfaceTest
.如果你需要更多的灵活性并希望在抽象类
AbstractInterfaceTest
中实现Interface
的测试,你也可以这样做,然后在你的ImplTest
中扩展AbstractInterfaceTest
nested test class .这两种方法都确保接口测试不会知道实现接口的类,这是answer you linked to的一个巨大缺点 .
您可以使用dynamic tests:
在我的项目中,我一直在使用这个库:
为了给我的JUnit测试添加参数化 . 我一直在使用版本4.x,但从未成为它提供的嵌入式参数化的粉丝 . 如果您熟悉TestNg的@DataProvider,那么这个扩展名没有太大区别 .
检查一下,看看它对我和我的团队是否有任何好处 . 坦率地说,我无法想象现在没有它 .