Java junit测试用例中异常的断言输出错误
我已经在junit中为getStackTrace()方法编写了这个测试用例: 但这是失败的。我如何纠正它以及它失败的原因? 错误是assert正在获取异常。Java junit测试用例中异常的断言输出错误,java,unit-testing,exception,junit,exception-handling,Java,Unit Testing,Exception,Junit,Exception Handling,我已经在junit中为getStackTrace()方法编写了这个测试用例: 但这是失败的。我如何纠正它以及它失败的原因? 错误是assert正在获取异常。 我应该如何避免这种情况。我稍微简化了您的代码,以向您表明没有什么例外。没有功能更改,我只删除了死代码。代码可以归结为: public class xyzExceptionTest { private String message; private String source; private
我应该如何避免这种情况。我稍微简化了您的代码,以向您表明没有什么例外。没有功能更改,我只删除了死代码。代码可以归结为:
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));
}
}
及
现在,您可以看到,XyzException
类现在什么都不是,它只是用传递的消息调用父构造函数,没有别的
静态的getStackTrace(XyzException e)
方法也没有任何作用。它接受传递的异常并将其堆栈跟踪作为一个长字符串返回。在我的设置中,堆栈跟踪如下所示:
你到底为什么希望“MyObject.class”
出现在那里的任何地方?代码按其应有的方式工作,请参见例如
从头开始,定义您的类和预期行为,然后编写测试以验证所述行为。现在,测试完全错了。用正确的方法编辑了assertEquals。我明白了。这里的代码充满了“lil错误”。例如,它不编译,因为没有字段mSource
、mobjectError
和mCause
。它们看起来微不足道,因为它们未被使用。是否应该使用它们?问题归根结底是,为什么希望新的NullPointerException().printStackTrace()
调用返回“MyObject.class”。您想要实现的到底是什么?正如我刚才介绍的代码的主要部分一样,它是正确编译的。我将编辑并声明mObject,mSource。我试着看看它与异常一起使用时的行为。在s.o.p上,上述方法返回MyObject.class。我正试图弄清楚,但它给出了异常错误。为什么希望XYZEException.getStackTrace返回MobjectError?根据您的代码,它应该返回对传递的异常的printStackTrace调用。所有这些都应该在调用Throwable类的printStackTrace时结束,该类的行为与您期望的完全不同
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));
}
}
public class XyzException extends Exception {
public static String getStackTrace(XyzException e) {
StringWriter sw = new StringWriter();
try (PrintWriter w = new PrintWriter(sw)) {
e.printStackTrace(w);
return sw.toString();
}
}
public XyzException(String message) {
super(message);
}
}
public class XyzExceptionTest {
private String message;
private XyzException exception;
@Before
public void setUp() throws Exception {
message = "A message";
exception = new XyzException(message);
}
@Test
public void getStackTraceTest() {
System.out.println(XyzException.getStackTrace(obj));
assertEquals("GetStackTrace unexpected Value", "MyObject.class", XyzException.getStackTrace(exception));
}
}
cz.slanec.playground.XyzException: A message
at cz.slanec.playground.XyzExceptionTest.setUp(XyzExceptionTest.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)