【问题标题】:Why does Intellij unit test view show a much shorter run time than actual wall clock time of running tests?为什么 Intellij 单元测试视图显示的运行时间比运行测试的实际挂钟时间短得多?
【发布时间】:2016-10-17 07:22:53
【问题描述】:

Intellij Run 视图显示每个单独测试的运行时间。 我有一个包含大约 800 个测试的模块,Intellij 指示大约 1s500 毫秒。但是,按照挂钟时间衡量,运行测试显然需要更长的时间。

这些是纯单元测试,没有外部系统(或文件系统)连接,因此它们是 100% CPU 绑定的(除非操作系统分页等,但我有大量内存,所以这不是问题)。

  1. 差异的来源是什么? Intellij 是否不考虑设置/拆卸和其他引导?
  2. 有什么方法可以让它显示运行所有测试所需的挂钟时间?
  3. 关于如何加快测试速度的任何想法(例如,我可以让它们并行运行吗?)

谢谢。

【问题讨论】:

  • 计时信息可能来自 JUnit 本身,您可能想深入研究一下源代码,看看他们在哪里进行计时 - 我敢说他们只记录代码的时间测试方法,而不是之前/之后的方法。显示挂钟时间可能可以通过对整个运行计时的套件来完成。最后,我认为 JUnit 中有一个实验性的并行测试选项。
  • 对于并行化位,这是另一种解决方案(特别适用于 junit 参数以及需要通过 powermock 模拟静态代码而并行套件选项无法安全处理的情况)stackoverflow.com/questions/38162802/…
  • 我假设这与上下文启动时间(每个测试类一次)被排除在每次测试测量之外有关。

标签: java unit-testing intellij-idea


【解决方案1】:

测试运行器只计算测试的设置和运行时间。构建通常需要额外的时间。即使项目和测试已经构建,构建系统首先需要确定是否有任何更改。根据您的构建系统和项目的大小,这可能需要大量时间。 gradle因此而臭名昭著。在 Eclipse 中(当时我还在使用它),这曾经要好得多,因为它在后台非常有效地构建 Java 代码。现代构建系统受到这些额外延迟的影响,因为它们不仅会编译和打包,还会检查外部依赖项。

【讨论】:

  • 谢谢,这个问题已经有一段时间了,但我记得问题不在于初始构建,项目也相对较小。或者你的意思是构建发生在每个测试之间?如果是这样,那么这可以解释它 - 是的。但肯定不是最初的构建。
猜你喜欢
  • 2013-03-04
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多