Java 为什么测试者在这些JUnit测试中间停止?

Java 为什么测试者在这些JUnit测试中间停止?,java,unit-testing,junit,Java,Unit Testing,Junit,在一个Java项目中,一个模块中有670个JUnit测试。在最近的一次重构之后,出现了一种奇怪的行为 所发生的情况是,尽管当我尝试运行模块中的所有测试时,所有670个测试都运行并通过了OK(JUnit test runner识别出正确的测试数量,并开始运行它们),但它在测试187之后停止: 我删除了所有的测试,并将它们重新添加到组中,一次一组地搜索一个有问题的测试。此外,我还尝试了不同的测试组合,以查看特定的测试是否会破坏测试套件。奇怪的是,有600个测试一直运行到: 601测试,套件在测试

在一个Java项目中,一个模块中有670个JUnit测试。在最近的一次重构之后,出现了一种奇怪的行为

所发生的情况是,尽管当我尝试运行模块中的所有测试时,所有670个测试都运行并通过了OK(JUnit test runner识别出正确的测试数量,并开始运行它们),但它在测试187之后停止:

我删除了所有的测试,并将它们重新添加到组中,一次一组地搜索一个有问题的测试。此外,我还尝试了不同的测试组合,以查看特定的测试是否会破坏测试套件。奇怪的是,有600个测试一直运行到:

601测试,套件在测试205后停止运行:

然后,当我添加更多的测试时,它停止的数字会回归到670个数字中的187个,我们在我的三个屏幕截图的第一个中看到

这些测试中大约有150个是依赖于资源连接的集成测试,而剩下的大多数是单元测试。我怀疑这些资源连接是一个因素,允许相同数量的测试通过或失败,这取决于集成测试的数量

事实证明,我可以单击“重新运行失败的测试”,它的功能就像“继续运行测试套件”按钮。经过两步过程后,我可以运行整个套件,全部为绿色


为了确认这是代码库中实际更改的结果,而不是缓存失效的结果,我甚至删除了所有与IDE相关的文件,将其签出并使用所有新操作系统和工具在新机器上构建。然而,现在只有重构分支始终表现出这种奇怪的行为。

您能找出它最后运行的测试,并可能逐步完成它吗?我认为一个
系统.exit
调用可能会做到这一点(我刚刚尝试了它,这就是我的机器上的行为)。我尝试了许多不同的测试组合,结果证明,没有任何特定的测试可以受到指责。可能是某个地方存在某种静态,这样,测试B将命中System.exit,但前提是测试a在它之前运行。我想你已经成功了。一个集成测试支持类在没有关闭SQL连接的情况下打开了SQL连接,当它达到神奇的数字并且连接被拒绝时,该测试类实际上打开了System.exit()噢,那些类型的错误是很难找到的。很高兴你找到了!你能找出它最后运行的是哪个测试吗?也许你能一步一步地完成它吗?我认为一个
系统.exit
调用可能会做到这一点(我刚刚尝试了它,这就是我的机器上的行为)。我尝试了许多不同的测试组合,结果证明,没有任何特定的测试可以受到指责。可能是某个地方存在某种静态,这样,测试B将命中System.exit,但前提是测试a在它之前运行。我想你已经成功了。一个集成测试支持类在没有关闭SQL连接的情况下打开了SQL连接,当它达到神奇的数字并且连接被拒绝时,该测试类实际上打开了System.exit()噢,那些类型的错误是很难找到的。很高兴你找到了!