【发布时间】:2016-12-01 22:34:49
【问题描述】:
我有这个测试:
@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() (使用 currentTimeMillis() 计算 delta 返回 0 ms)。无论如何,速度报告永远是矛盾的,这很奇怪。你有没有遇到过类似的现象?
【问题讨论】:
标签: java junit infinitest