我有这样的测试:
@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模拟出来的(设置为返回类文字)。我甚至在遇到活动代码时临时设置了抛出异常的代码(我还通过临时移除mock进行了测试,这样可以有效地在活动代码中抛出异常,而不需要mocking),从而确认mock在注入时可以正常工作。另一个较慢的部分可能是getPackage(),我还没有深入研究过它(用currentTimeMillis()计算增量返回0毫秒)。无论如何,速度报告总是相互矛盾的,这是非常奇怪的。你有没有遇到过类似的现象?
发布于 2020-02-07 00:35:50
我刚刚遇到了同样的问题。实际的@Test运行时间为40ms,但Infinitest和Gradle都报告运行时间接近900ms。通过检查我的测试,我意识到@BeforeEach的成本是巨大的~90%,尽管这只是设置了一堆mockito mock。
据我所知,除了更改最早的preferences之外,没有其他方法可以消除此警告。对我来说,在测试的运行时考虑安装/拆卸成本是没有意义的。至少,如果有一些注释可以让您在每次测试的基础上对此进行配置,那就太好了。
https://stackoverflow.com/questions/40921648
复制相似问题