首页 文章

JUnit Jupiter中的参数化测试执行(JUnit5)

提问于
浏览
5

有没有办法在 JUnit JupiterJunit5 )中进行参数化测试?

我经历了How to write junit tests for interfaces?并希望使用JUnit5将测试用例实现为answered here . 但是在Jupiter包中找不到相同的类/ es .

进一步寻找替代品,我发现Extensions将取代@RunWith,如Migrating tips所述

@RunWith不再存在;被@ExtendWith取代 .

我尝试定义示例here - MockitoExtension中提供的 CustomExtension 但无法成功使用类 Parameterized 的实例 .

期待有关如何使用 JUnit5 中实现它的类的参数化实例测试接口的建议 .

4 回答

  • 4

    JUnit 5 M4刚刚发布,现在支持参数化测试 .

    这是“Hello World”示例:

    有关完整文档和其他示例,请参阅User Guide .

  • 1

    截至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的一个巨大缺点 .

  • 5

    您可以使用dynamic tests

  • 2

    在我的项目中,我一直在使用这个库:

    为了给我的JUnit测试添加参数化 . 我一直在使用版本4.x,但从未成为它提供的嵌入式参数化的粉丝 . 如果您熟悉TestNg的@DataProvider,那么这个扩展名没有太大区别 .

    检查一下,看看它对我和我的团队是否有任何好处 . 坦率地说,我无法想象现在没有它 .

相关问题