我需要一个例外部分的测试用例:
try {
return String.valueOf(value);
} catch (Exception e) {
return null;
}
答案 0 :(得分:2)
您可以创建一个toString()
方法抛出异常的类:
class Throwing {
@Override public String toString() {
throw new UnsupportedOperationException();
}
}
然后将其实例传递给单元测试中的方法:
assertNull(yourMethod(new Throwing()));
当然,您可以使用自己喜欢的模拟框架,而不是像这样创建一个显式类。
但要仔细考虑这种方法是否值得。如果你有toString()
个方法抛出异常的类,那么这是一个很大的问题来源,而且这是你的方法处理String.valueOf
以上的唯一情况。
在您碰巧执行字符串转换的代码中的任何其他位置(例如"" + instance
),该类的实例将抛出异常,并且您不会在那里捕获它们。
考虑这个阴险的案例:
try {
doSomething(instance);
} catch (Exception e) {
throw new RuntimeException("Exception occurred: " + instance, e);
}
在这种情况下,instance.toString()
的异常只会在捕获到异常e
时被抛出,但它是toString()
的异常会抛出 - 你实际上并不是完全见e
。因此,它会使查看真正的问题变得更加困难。
我建议不完全使用此方法,因此不要捕获异常,并直接(或隐式)使用String.valueOf(Object)
,以便您实际知道问题何时发生。< / p>
未经检查的异常 - toString()
可以抛出的唯一类型 - 表示编程错误。不要吞下这些错误,然后你就会知道修复它们。