我已经使用JUnit的实验 @Theory
注释为 hashCode
和 equals
方法实现了通用测试 . 测试用例类本身基于dfa's version .
但是,当我尝试测试 java.net.InetAddress
类时,如果提供数据点的方法包含抛出异常的代码(在本例中为 UnknownHostException
),我遇到了一个特殊问题:
所以我尝试了两种方法,这两种方法都导致了同样令人不满意的结果:
- 将方法声明为抛出相应的异常:
@DataPoints
public static InetAddress[] declareException() throws UnknownHostException {
return new InetAddress[] {
InetAddress.getByName("not a valid internet address")
};
}
- 显式捕获异常并重新抛出
AssertionError
:
@DataPoints
public static InetAddress[] rethrowAsAssertionError() {
try {
return new InetAddress[] {
InetAddress.getByName("not a valid internet address")
};
} catch(UnknownHostException ex) {
throw new AssertionError(ex);
}
}
在这两种情况下,都会使用无用的消息"Never found parameters that satisfied method assumptions. Violated assumptions: []"抛出 AssertionError
,这与首先没有 @DataPoints
注释的方法相同 .
有没有人知道是否有办法将异常传播给JUnit(最终是用户)或者这是JUnit中的错误?
2 回答
这是一个已知问题137: Exceptions hidden in DataPoints methods .
解决方法是在@BeforeClass中创建数据点,然后从DataPoints中使用它:
这应该工作 .
还有待处理的拉取请求328: @DataPoints-related fixes,但目前仍在讨论中,尚未被接受 .
这是一个众所周知的问题 . 但是,我发现了一个更简单的解决方只需重命名数据方法 . 不要从DataPoints返回原始变量 . 为了确认,我附上了我的截图 .