我已经使用JUnit的实验性注释对hashCode
和equals
方法实施了通用测试@Theory
。测试用例类本身基于dfa的版本。
但是,当我尝试测试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中的错误吗?
这是一个已知的问题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] 删除。
我来说两句