gradle间歇性测试失败:如何诊断?

时间:2013-06-24 00:26:24

标签: java jackson gradle testng heisenbug

环境:groovy 2.1.5,gradle 1.6;使用TestNG 6.8进行测试。

我正在切换到Gradle并且粗糙的边缘很小,但对于this project我有间歇性的测试失败;一次测试,始终相同,至少有一半失败。它永远不会在IDEA中失败,并且在使用maven时从未失败过。

此测试很简单:包中包含核心JSON模式,我检查默认加载配置是否包含这些模式。相关模式为this one,失败的测试为here

当测试失败时,报告说:

java.lang.AssertionError: expected [{"schema": "here"}] but found [{}]
    // overly long stacktrace

现在,我使用的JSON库是Jackson(在本例中为2.1.5)。在2.1.x中曾经存在一个错误,它不能正确加载JSON对象并返回空对象,就像上面显示的那样。但这是在2.1.1。我有一大堆其他测试使用包含JSON对象的JSON文件,没有任何问题,所以似乎JSON文件正确加载...

我想诊断问题,但是我不知道从哪里开始......到目前为止,我唯一能够发现的是,groovy和gradle似乎都没有使用Jackson。或者,如果他们这样做,那就很好隐藏......

如何诊断问题?

编辑:我发现了另一个问题Gradle does not support parameterized tests;而这个测试就是其中之一。

编辑2:从那时起,我已经设法让TestNG完成报告......而且它实际上只对DRAFTV4失败了。间歇。

1 个答案:

答案 0 :(得分:0)

您是否使用debug模式运行Gradle测试?这将允许您附加调试器并逐步完成失败的测试。您还可以通过修改GRADLE_OPTS将Gradle本身作为可调试应用程序启动,如对this问题的响应中所示。

但是,如果测试只是间歇性地失败,则表明某种影响测试的非确定性行为。