【发布时间】:2014-12-04 08:24:01
【问题描述】:
public class xyzException extends Exception{
private final Object mSource;
private final Object mObjectInError;
private final Throwable mCause;
public xyzException(Object obj1, Object obj2, Throwable cause, String message){
super(message);
this.mSource = obj1;
this.mObjectInError = obj2;
this.mCause = cause;
}
public static String getStackTrace(xyzException e) {
StringWriter sw = new StringWriter();
PrintWriter w = new PrintWriter(sw);
e.printStackTrace(w);
try {
w.close();
}
catch (final Exception ignore) {
}
return sw.toString();
}
我已经在 junit 中为 getStackTrace() 方法编写了这个测试用例:
public class xyzExceptionTest {
private String message;
private String source;
private xyzException obj;
@Before
public void setUp() throws Exception {
message = "Exception";
source = "source";
obj = new xyzException(source, "MyObject.class", new NullPointerException(), message);
}
@Test
public void getStackTraceTest() {
assertEquals("GetStackTrace unexpected Value", "MyObject.class",xyzException.getStackTrace(obj));
}
}
但这正在失败。我该如何纠正它以及它失败的原因? 错误是断言正在获取异常。 我应该如何避免这种情况。
【问题讨论】:
-
用正确的方法编辑了 assertEquals..
-
我明白了。这里的代码充满了“小错误”。例如,它不会编译,因为没有字段
mSource、mObjectInError和mCause。它们似乎微不足道,因为它们未被使用。应该使用它们吗? -
问题归结为您期望
new NullPointerException().printStackTrace()调用返回“MyObject.class”的原因。你到底想要达到什么目的? -
它正在正确编译,因为我刚刚放置了代码的主要部分。我将编辑并声明 mObject,mSource。我试图看看它在与异常一起使用时的行为。在 s.o.p 上,上述方法返回 MyObject.class。我想弄清楚,但它给出了不寻常的错误。
-
您为什么期望 xyzException.getStackTrace 返回 mObjectInError?根据您的代码,它应该在传递的异常上返回对 printStackTrace 的调用。所有这一切都应该以 Throwable 类 Docu of Throwable 的 printStackTrace 调用结束,它的行为与您的预期完全不同
标签: java unit-testing exception junit exception-handling