我使用JUnit的实验hashCode
注释为equals
和@Theory
方法实现了通用测试。测试用例类本身基于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);
}
}
在这两种情况下,AssertionError
抛出无用的消息“从未找到满足方法假设的参数。违反假设:[]”,这与没有首先是@DataPoints
注释方法。
有没有人知道是否有办法将异常传播给JUnit(最终是用户)或者这是JUnit中的错误?
答案 0 :(得分:8)
这是一个已知问题137: Exceptions hidden in DataPoints methods。
解决方法是在@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-related fixes,但目前仍在讨论中,尚未被接受。
答案 1 :(得分:0)