MRa*_*ser 20 java ant junit continuous-integration unit-testing
我想减少构建(使用ant)运行测试所需的时间.目前我使用默认值forkMode,它在每个测试类(perTest)上分配一个新的vm.
我正在考虑切换到forkMode="once"但我不确定这是否会以某种方式结合测试,并且可能在运行我的测试后给我假阳性和/或假阴性结果.
问题:
每个测试用例是否会获得一个新的ClassLoader,以便之前运行的所有静态引用都不再可访问/可见?
还有其他导致测试依赖/耦合的测试方法可能会改变行为(除了我没有使用的本机库加载)
UPDATE
根据当前的答案,当使用forkMode时,似乎junit总是在每个vm/fork的所有测试用例之间共享一个类加载器.(所以forkMode ="once"的确意味着所有测试都有一个类加载器)
这有很多优点(测试速度更快,并且可能导致测试因静态耦合而失败)但也有一些缺点(静态耦合只有在使用共享类加载器时才会起作用 - >误报)
Dun*_*gor 11
通常在一个VM中运行所有测试是一件好事.它迫使你看静态耦合并且更快.至关重要的是,它也是IDE运行它们的方式,而这正是测试应该运行的方式 - 尽可能接近编译时的频率.
请注意,默认模式不是为每个测试(即方法)为每个测试用例(即类)创建一个新的 VM。在我目前正在测试的应用程序中,当我将 VM 重用于多个测试时会出现问题:对象和状态从早期的测试中遗留下来并阻止后来的测试工作。如果您的应用程序结构良好并且您的测试是严格独立的,这可能不是问题。我怀疑垃圾收集会在每次测试后自动运行:众所周知,在任何情况下都很难确保在任何给定时间调用它。
| 归档时间: |
|
| 查看次数: |
6497 次 |
| 最近记录: |