我有这个测试:
@Test
public void findsPackageClasses() throws ClassNotFoundException, IOException {
final long startTime = System.currentTimeMillis();
Class<?>[] classes = finder.getPackageClasses(ClassFinderStubsPackageMarker.class.getPackage());
Arrays.sort(classes, (c1, c2) -> c1.getName().compareTo(c2.getName()));
assertArrayEquals(STUB_CLASSES, classes);
System.out.println(String.format("Test duration: %d ms", System.currentTimeMillis() - startTime));
}
当我在 Eclipse 中将它作为 JUnit 测试运行时,JUnit 报告在此测试期间定期显示 0.4-0.5 秒。Infinitest 还为其发出慢速测试警告。但是,持续时间计算currentTimeMillis()
总是使用 4-5 毫秒,并打印到控制台。这是怎么回事?
我想通过消除缓慢的部分来摆脱警告 - 转向集成测试 - 但速度报告似乎是矛盾的。此外,唯一慢的部分可能是finder.getPackageClasses()
它的文件系统依赖被 Mockito 模拟出来(设置为返回类文字)。我什至放置了临时代码以在命中实时代码时抛出异常(我还通过临时删除模拟进行了测试,这样异常有效地在实时代码中抛出而无需模拟),确认模拟在何时起作用它被注入了。另一个缓慢的部分可能是我尚未彻底调查的 getPackage() (计算 delta 并currentTimeMillis()
返回 0 ms)。无论如何,速度报告是永远矛盾的,这很奇怪。你有没有遇到过类似的现象?