当前位置: 首页 > 面试题库 >

junit:forkMode =“ once”对测试正确性的影响

东方乐
2023-03-14
问题内容

我想减少我们的构建(使用ant)运行测试所花费的时间。目前,我使用的是default
forkMode,它 在每个测试类
perTest上派生一个新的虚拟机

我正在考虑改用,forkMode="once"不确定是否会 以某种方式 耦合测试, 并可能在运行测试后给我假阳性和/或假阴性结果。

问题:

  1. 每个测试用例是否都会获得一个新的ClassLoader, 以便不再可以访问/查看以前运行的所有静态引用?

  2. 是否还有 其他 导致测试依赖/测试方法耦合的方法,这些方法可能会改变行为(除了我未使用的本地库加载之外)

  3. 垃圾收集/完成如何处理,它们在每次测试后运行吗?(我不依赖它们,但我只想获得完整的图片)

更新

根据当前答案,当使用forkMode时,junit似乎总是在每个vm / fork的所有测试用例之间共享一个类加载器。(所以forkMode =“
once”实际上意味着所有测试都只有一个类加载器)

这具有许多优点(测试速度更快,并且可能由于静态耦合而导致测试失败),但也有一些缺点(静态耦合仅在使用共享类加载器时才有效->误报)


问题答案:
  1. 测试运行程序将有效地为您的所有测试创建一个套件并运行它们-这样仅涉及一个类加载器。
  2. 是的,这意味着静态数据将在测试之间共享,这有时会很方便,但是会迫使您减少子句之间的静态耦合,这是一件好事。
  3. 通常没有任何显式GC,但是您可以自己做。

通常,在一台VM中运行所有测试是一件好事。它迫使您查看静态耦合,并且速度更快。至关重要的是,这也是您的IDE运行它们的方式,而这实际上就是应该运行测试的方式-
尽可能地接近编译的频率。



 类似资料:
  • 我正在为一个特定的方法编写junit测试。该方法包含对DAO类中其他方法的调用,我正在用EasyMock对其进行模拟。

  • 问题内容: 在上周,我创建了两个班,我的团队对他们的表现表达了一些担忧。为了评估我的代码,我编写了一些简单的JUnit测试,它们通过构建丰富的测试数据集,然后通过相关方法将这些数据馈入数千次迭代来练习这些类。我记录了每次迭代的运行时间,然后使用循环和注销了高,低和平均时间。最终,我让JUnit断言,高频率和平均时间都在可接受的范围内。这种测试方法使我的团队对此代码充满信心。 JUnit是否是以这种

  • 问题内容: 如果是这样,为什么呢?我的意思是,tinyint的搜索比int更快吗? 如果是这样,那么实际的性能差异是什么? 问题答案: 是的,根据数据类型,确实会有所不同。 vs.不会在速度上产生明显的差异,但是会在数据大小上产生差异。假设是1个字节,而不是4个字节,则每行保存3个字节。一段时间后加起来。 现在,如果它反对,那么将会有些下降,因为整数值之类的排序操作比字符串值要快得多。 如果它是可

  • 我第一次使用WebFlow和Reactive Mongo构建REST服务。 这是我的控制器和服务工具: 控制器: ServiceImpl: 而反应流(Mono和Flux)的原理对我来说是非常新的。然后我尝试使用JUnit 5和Mockito为这些方法编写一些测试。 测试: 所有测试都通过了。但我不确定模拟过程是否正确,在没有任何持续模拟的情况下,是否满足了预期。尤其是在delete测试中,当我怀疑

  • 我正在使用PowerMock测试中断异常情况下的错误处理。不幸的是,这些测试有时似乎对其他测试类有一些副作用:我在一个测试类中配置的模拟似乎在另一个测试类中仍然存在。为了产生副作用,我将下面的示例简化为基本行。 让我们假设我们有一个类要测试: 以及一个使用PowerMock测试私有方法的测试类: 当我现在创建另一个测试类(在第一个测试类之后执行)时,如下所示: 我立即得到以下异常: 如果我在第一节

  • 问题内容: 我有这个JavaWeb应用程序,它可以从电子表格上传成千上万的数据,该电子表格是从上到下按行读取的。我用来在服务器端显示应用程序当前正在读取的行。 -我知道要创建一个日志文件。实际上,我正在创建一个日志文件,同时在服务器提示符下显示日志。 还有其他方法可以在提示上打印当前数据? 问题答案: 它可能会影响您的应用程序性能。大小会因您所运行的硬件类型和主机上的负载而异。 可以将其转化为性能