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);}你真的应该更新你的问题,而不是把它放在评论里。