Spring boot 2 在测试中报告与 v1 不同的异常。使用 spring boot 1.5.18 的 Stacktrace 报告Running com.test.v1.TestStacktraceTests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.003 sec <<< FAILURE! - in com.test.v1.TestStacktracetest(com.test.v1.TestStacktrace) Time elapsed: 0.002 sec <<< ERROR!java.lang.NullPointerException: null at com.test.v1.Util.willThrowException(Util.java:15) at com.test.v1.TestStacktrace.test(TestStacktrace.java:20)使用 v1,您可以获得整个堆栈跟踪,从实际抛出异常的那一行开始 Util.willThrowException(Util.java:15)使用 spring boot 2.0.6 的 Stacktrace 报告Running com.test.v2.TestStacktraceTests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.022 s <<< FAILURE! - in com.test.v2.TestStacktracetest(com.test.v2.TestStacktrace) Time elapsed: 0.006 s <<< ERROR!java.lang.NullPointerException at com.test.v2.TestStacktrace.test(TestStacktrace.java:20)使用 v2,您只能得到TestStacktrace.java:20,这是异常堆栈跟踪中的最后一行。如果 stacktrace 有 5 个方法级别,那么只有最后一个调用者需要更多的时间来确定根本原因。有谁知道谁来解决这个问题,或者可以采取哪些步骤来获得与版本 1 相同的异常报告?更新:这是 TestStacktrace.java 文件的样子/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */package com.test.v1;import junit.framework.TestCase;import org.junit.Test;/** * * @author Jhovanni <jhovanni@github.com> */public class TestStacktrace extends TestCase { @Test public void test() { Util util = new Util(); util.willThrowException(null); }}Util.java只包含一个静态方法,调用时直接抛出和异常。TestStacktrace.javav1/v2 几乎相同,只是更改了包名。这两个项目都是最近使用 spring initializr 创建的,唯一的区别(除了包名)是pom.xml.
2 回答
三国纷争
TA贡献1804条经验 获得超7个赞
查看测试我可以看到您使用JUnit 3样式:
public class TestStacktrace extends TestCase
JUnit 4已经过时了 JUnit 3 将测试类设为 TestCase子类的要求。您应该使用@Test注释来表示测试:
public class TestStacktrace {
@Test
public void test() {
...
}
}
请注意,为了测试 Spring Boot 应用程序,您需要的唯一依赖项是这个 Starter:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
它包括 JUnit,有关更多详细信息,请参见此处。
添加回答
举报
0/150
提交
取消