我想减少构建(使用ant)运行测试所需的时间。
目前我使用默认的forkMode
,其中在每个测试类上分配一个新的vm (perTest
)。
我正在考虑切换到forkMode="once"
,但我不确定这是否会以某种方式结合测试并且可能在运行我的测试后给我假阳性和/或假阴性结果。
问题:
每个测试用例都会获得一个新的ClassLoader ,以便之前运行的所有静态引用都不再可访问/可见了吗?
是否存在其他内容导致测试依赖/耦合测试方法可能会改变行为(除了我没有使用的本机库加载)
的更新
根据当前的答案,当使用forkMode时,似乎junit总是在每个vm / fork的所有测试用例之间共享一个类加载器。 (所以forkMode =“once”的确意味着所有测试都有一个类加载器)
这有许多优点(测试速度更快,并且可能导致测试因静态耦合而失败)但也存在一些缺点(静态耦合仅在使用共享类加载器时才有效 - >误报)
答案 0 :(得分:11)
通常在一个VM中运行所有测试是一件好事。它迫使你看静态耦合并且更快。至关重要的是,它也是IDE运行它们的方式,而这正是测试应该运行的方式 - 尽可能接近编译时的频率。
答案 1 :(得分:4)
请注意,默认模式为每个测试用例(即类)分配新VM,而不是为每个测试(即方法)。在我正在测试的应用程序中,当我将VM重用于多个测试时会出现问题:对象和状态从早期测试中遗留下来并阻止以后的测试工作。如果您的应用程序结构良好且测试严格独立,则这可能不是问题。我怀疑垃圾收集在每次测试后自动运行:在任何情况下,确保在任何给定时间调用它都是非常困难的。
答案 2 :(得分:0)
关于这一点Stefan's blog entry,我冒昧地猜测: