Java 如何通知带有@Parameters注释的JUnit测试方法中的错误

Java 如何通知带有@Parameters注释的JUnit测试方法中的错误,java,junit,Java,Junit,我试图记录为JUnit参数化测试创建参数时发生的错误。当使用@Parameters注释的方法发生故障时,是否有任何方法可以在不修改该方法以捕获异常的情况下得到通知 用@Parameters注释的方法似乎不会触发JUnit RunListener的testFailure()方法 (以下是对“显示代码”注释的回应) 这是我正在运行的代码的概要: (1) 测试:(异常发生在'testCases()'方法中,在该方法中添加try/catch是有效的,但我试图避免这种情况,因为有数百个类似的测试) 如果存

我试图记录为JUnit参数化测试创建参数时发生的错误。当使用@Parameters注释的方法发生故障时,是否有任何方法可以在不修改该方法以捕获异常的情况下得到通知

用@Parameters注释的方法似乎不会触发JUnit RunListener的testFailure()方法

(以下是对“显示代码”注释的回应)

这是我正在运行的代码的概要:

(1) 测试:(异常发生在'testCases()'方法中,在该方法中添加try/catch是有效的,但我试图避免这种情况,因为有数百个类似的测试)


如果存在未捕获的异常导致该类中的所有测试失败,JUnit运行程序将声明初始化错误。在JUnit结果中,您将只看到单个初始化错误

这表明大多数test*方法只为“原子测试”调用,而“原子测试”不会捕捉到这一点,因为@Parameterized方法是生成“原子测试”的方法

看起来您需要查看该方法,迭代其getFailures(),并查找引用initializationError的失败对象

更新: 由于@Parameterized方法在测试运行程序初始化之前运行,因此您实际上可以创建一个调用@Parameterized方法的新测试方法,以确保@Parameterized方法有效。当然,这个新测试必须在@Parameterized类之外进行,但它是一个简单的重构


如果@Parameterized方法预计偶尔会失败,这是一个有用的测试,如果您的参数来自外部源或经常更改的源,则可能会失败。

请显示一些代码。感谢您的回复。我在上面添加了示例代码,这可能会帮助您更好地理解我描述的问题。在我的例子中,侦听器甚至没有在故障点添加。但是,如果我可以解决这个问题,并且没有调用testFailure(),那么我将尝试testRunFinished。再次感谢。更新了我的答案,建议为@Parameterized方法创建额外的测试。
@RunWith(MyParameterizedRunner.class)
public class MyTest {

    @Parameters
    public static List<String[]> testCases() {
      ... [**exception occurs here**]
    }
    ...
}
public class MyParameterizedRunner extends Parameterized {

    public MyParameterizedRunner(Class<?> klass) throws Throwable {
        super(klass);
    }

    @Override
    public void run(RunNotifier notifier) {
        notifier.addListener(new MyListener());
        super.run(notifier);
    }
}
public class MyListener extends RunListener {
    public void testFailure( Failure fail) {
      ...
    }
}