首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于4毫秒的测试,JUnit显示0.4秒,无限慢的测试警告

对于4毫秒的测试,JUnit显示0.4秒,无限慢的测试警告
EN

Stack Overflow用户
提问于 2016-12-02 06:34:49
回答 1查看 143关注 0票数 3

我有这样的测试:

代码语言:javascript
复制
@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毫秒)。无论如何,速度报告总是相互矛盾的,这是非常奇怪的。你有没有遇到过类似的现象?

EN

回答 1

Stack Overflow用户

发布于 2020-02-07 00:35:50

我刚刚遇到了同样的问题。实际的@Test运行时间为40ms,但Infinitest和Gradle都报告运行时间接近900ms。通过检查我的测试,我意识到@BeforeEach的成本是巨大的~90%,尽管这只是设置了一堆mockito mock。

据我所知,除了更改最早的preferences之外,没有其他方法可以消除此警告。对我来说,在测试的运行时考虑安装/拆卸成本是没有意义的。至少,如果有一些注释可以让您在每次测试的基础上对此进行配置,那就太好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40921648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档