如何通知JUnit @DataPoints带注释的方法中生成的异常?

托马斯·H:

我已经使用JUnit的实验性注释hashCodeequals方法实施了通用测试@Theory测试用例类本身基于dfa的版本

但是,当我尝试测试java.net.InetAddress该类时,如果提供数据点的方法包含引发异常的代码(在本例中为UnknownHostException,则会遇到一个特殊的问题

因此,我尝试了两种导致同样令人不满意的结果的替代方法:

  1. 将方法声明为引发适当的异常:

    @DataPoints
    public static InetAddress[] declareException() throws UnknownHostException {
        return new InetAddress[] {
            InetAddress.getByName("not a valid internet address")
        };
    }
    
  2. 明确捕获异常并重新抛出为AssertionError

    @DataPoints
    public static InetAddress[] rethrowAsAssertionError() {
        try {
            return new InetAddress[] {
                InetAddress.getByName("not a valid internet address")
            };
        } catch(UnknownHostException ex) {
            throw new AssertionError(ex);
        }
    }
    

在这两种情况下,都将AssertionError抛出一条无用的消息“从未找到满足方法假设的参数。违背假设:[]”,这与首先没有@DataPoints注释方法相同

有谁知道是否有一种方法可以将异常传播给JUnit(最终是用户),或者这是JUnit中的错误吗?

马修·法威尔(Matthew Farwell):

这是一个已知的问题137:DataPoints方法中隐藏的异常

解决方法是在@BeforeClass中创建数据点,然后从DataPoints中使用它:

private static InetAddress[] datapoints;

@BeforeClass
public static void generateData() throws UnknownHostException {
  // do all the work of generating the datapoints
  datapoints = new InetAddress[] {
    InetAddress.getByName("not a valid internet address")
  };
}

@DataPoints
public static InetAddress[] data() {
  return datapoints;
}

这应该工作。

有一个待处理的拉取请求328:@DataPoints相关的修复程序,但目前仍在讨论中,尚未接受。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章