首页 > 解决方案 > 是否可以在 Junit5 中禁用参数化测试基础参数

问题描述

我有一个场景,我试图禁用参数化测试,但我不想禁用所有它们。考虑下面的模拟场景

@CsvSource({
      "1,1",
      "2,2",
      "3,not3"
  })
  @ExtendWith(DisableParameterized.class)
  @ParameterizedTest( name = "Test for {0} is equal to {1}")
  void equality(String expected, String actual) {
    assertEquals(expected, actual, "Not as expected");
  }

是否可以编写一个DisableParameterized implements ExecutionCondition可以禁用基于某些元数据的参数化测试之一。

我可以在

public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext extensionContext)

是否displayName 有其他方法可以通用地提供某种元数据来禁用参数化测试?

如果我将它们标记为@Disabled,它会禁用所有 ParameterizedTests,以至于它甚至不会调用单个测试并在方法级别停止。

编辑:正如下面 Sam 所提到的,在提到的问题得到修复/实施并在更新版本中发布之前,不可能使用标准 API 来做到这一点。然而,我能够使用反射编写代码来实现我想要的,所以我在下面添加了一个答案

标签: javajunit5junit5-extension-model

解决方案


不,从 JUnit Jupiter 5.6(在撰写本文时等待 GA 发布)开始,无法访问用于调用参数化测试的参数。

目前,推断该类型信息的唯一方法确实是通过显示名称。

以下未解决的 JUnit 5 问题与此主题相关。


推荐阅读