Java(maven):如何知道错误在哪里(无用的回溯)
我正在用maven()编写我的第一个项目。当我使用Java(maven):如何知道错误在哪里(无用的回溯),java,maven,Java,Maven,我正在用maven()编写我的第一个项目。当我使用mvn-Dtest=EchoTest测试运行测试时,我得到了一个构建失败 关键是EchoActorSystem是一个相当复杂的类,而actorOf方法需要大量的工作,从system调用许多函数。例如,它调用super.actorOf(),然后修复结果的一些属性,等等。 我正在通过添加许多Sysytem.out.println来搜索故障线路,但我确信这不是正确的工作方式。您将在目标/surferreports目录中找到完整的堆栈跟踪它,文件Echo
mvn-Dtest=EchoTest测试运行测试时,我得到了一个构建失败
关键是EchoActorSystem
是一个相当复杂的类,而actorOf
方法需要大量的工作,从system
调用许多函数。例如,它调用super.actorOf()
,然后修复结果的一些属性,等等。
我正在通过添加许多Sysytem.out.println来搜索故障线路,但我确信这不是正确的工作方式。您将在目标/surferreports
目录中找到完整的堆栈跟踪它,文件EchoTest.txt
您可以在target/surfire reports
目录中找到完整的堆栈跟踪,文件EchoTest.txtmvn test-Dtest=EchoTest-DtrimStackTrace=false
将为您提供完整的堆栈跟踪
神奇的是-DtrimStackTrace=false
Maven将默认地将测试代码削减到只显示在测试中的行。老实说,这是我第一次注意到这种行为,我觉得这是一个非常奇怪的默认值(我可以理解控制台输出,但在surfire reports XML报告中也是如此?mvn test-Dtest=EchoTest-DtrimStackTrace=false
将为您提供完整的堆栈跟踪
神奇的是-DtrimStackTrace=false
Maven将默认地将测试代码削减到只显示在测试中的行。老实说,这是我第一次注意到这种行为,我觉得这是一个非常奇怪的默认值(我可以理解控制台输出,但在surfire reports XML reports中也是如此?Hum,EchoTest.initialize(EchoTest.java:50)
不够吗?但是如果你想把你的日志弄得乱七八糟,你可以做mvn-X clean test
。把EchoTest.java
第50行的内容添加到你的问题中。这看起来像是一个竞争条件,在你的两行代码之间有一些其他线程将system
设置为null。这是整个initialize()
方法吗?是否每次使用maven运行时都会发生这种情况?如果JUnit在没有Maven的情况下运行,会发生这种情况吗?@JiriTousek-在这种情况下,Maven吃掉了大部分堆栈跟踪。@Tunaki虽然-X
在输出中添加了大量bumf,但Maven仍然会因为测试失败而切断堆栈跟踪。嗯,EchoTest.initialize(EchoTest.java:50)
是否足够?但是如果你想把你的日志弄得乱七八糟,你可以做mvn-X clean test
。把EchoTest.java
第50行的内容添加到你的问题中。这看起来像是一个竞争条件,在你的两行代码之间有一些其他线程将system
设置为null。这是整个initialize()
方法吗?是否每次使用maven运行时都会发生这种情况?如果JUnit在没有Maven的情况下运行,会发生这种情况吗?@JiriTousek-在这种情况下,是Maven吃掉了大部分堆栈跟踪。@Tunaki当-X
向输出添加了大量bumf时,Maven仍然会因为测试失败而切断堆栈跟踪。事实并非如此。target/surefire reports/EchoTest.txt仅包含“测试运行:4[…]java.lang.NullPointerException at EchoTest.initialize(EchoTest.java:50)”,在跟踪上没有更多指示可能是我的项目设置错误?它没有。target/surefire reports/EchoTest.txt仅包含“测试运行:4[…]java.lang.NullPointerException at EchoTest.initialize(EchoTest.java:50)”,跟踪上没有更多指示可能是我的项目设置错误?
nonAcceptedTypeVerification(EchoTest) Time elapsed: 0.044 sec <<< ERROR!
java.lang.NullPointerException
at EchoTest.initialize(EchoTest.java:50)
@Before
public void initialize() throws InterruptedException
{
system = new EchoActorSystem();
echo_actor = system.actorOf(); <-- line 50
}