Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为异常部分的静态方法编写测试用例_Java_Junit - Fatal编程技术网

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

Java 如何为异常部分的静态方法编写测试用例,java,junit,Java,Junit,我需要一个异常部分的测试用例: try { return String.valueOf(value); } catch (Exception e) { return null; } 您可以创建一个类,其toString()方法引发异常: class Throwing { @Override public String toString() { throw new UnsupportedOperationException(); } } 然后在单元测试中将此实例传递给

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

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

您可以创建一个类,其
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);
}
在这种情况下,只有捕获到异常
e
时才会抛出
instance.toString()
中的异常,但抛出的是
toString()
中的异常-实际上根本看不到
e
。因此,这将使我们更难看到真正的问题

我建议完全不要使用此方法,因此不要捕获异常,直接(或隐式)使用
String.valueOf(Object)
,这样您就可以知道问题何时发生


未经检查的异常(只有
toString()
可以抛出的类型)表示编程错误。不要吞咽这些错误,这样你就会知道如何修复它们。

所以写一个。您在等待什么?模拟的
值中可能存在重复的Pass,当您调用其
toString()
方法时,该值会引发异常。@AndyTurner为什么删除您的答案?对我来说不是很糟糕吗?虽然,有时我也认为,回答这些低质量的问题并不是社区所期望的事情。@GhostCat这就是重点。嘿,把答案拿回来。我觉得有足够的“不要那样做”值(请参见下面的
--
)。大家好,我通过长时间的尝试得到了答案,下面是测试字符串是否为null的测试用例:public void toStringForNULLTest()抛出异常{new NonStrictExpectations(){{new MockUp(){@Mock public String valueOf(Object obj)抛出异常{throw new Exception();}};}};整数a=new Integer(123);utilities.toString(a);}你真的应该更新你的问题,而不是把它放在评论里。