如何为异常部分编写静态方法的测试用例

时间:2016-09-14 06:30:20

标签: java junit

我需要一个例外部分的测试用例:

try { 
  return String.valueOf(value);
} catch (Exception e) {
  return null;
}

1 个答案:

答案 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()可以抛出的唯一类型 - 表示编程错误。不要吞下这些错误,然后你就会知道修复它们。