Spring boot 2异常堆栈跟踪不完整

Spring boot 2 在测试中报告与 v1 不同的异常。


使用 spring boot 1.5.18 的 Stacktrace 报告


Running com.test.v1.TestStacktrace

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.003 sec <<< FAILURE! - in com.test.v1.TestStacktrace

test(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.TestStacktrace

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.022 s <<< FAILURE! - in com.test.v2.TestStacktrace

test(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.


烙印99
浏览 205回答 2
2回答

摇曳的蔷薇

这与 IDE 相关,而不是 spring 项目固有的。问题可以关闭。

三国纷争

查看测试我可以看到您使用JUnit 3样式:public class TestStacktrace extends TestCaseJUnit 4已经过时了 JUnit 3 将测试类设为 TestCase子类的要求。您应该使用@Test注释来表示测试:public class TestStacktrace {&nbsp; &nbsp; @Test&nbsp; &nbsp; public void test() {&nbsp; &nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; }}请注意,为了测试 Spring Boot 应用程序,您需要的唯一依赖项是这个 Starter:<dependency>&nbsp; <groupId>org.springframework.boot</groupId>&nbsp; <artifactId>spring-boot-starter-test</artifactId>&nbsp; <scope>test</scope></dependency>它包括 JUnit,有关更多详细信息,请参见此处。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java