8

在我阅读的所有教程中Test::Class,似乎有一个运行脚本可以加载所有类。我认为从这个角度来看,Test::Harness这只是一个巨大的考验。我认为它不能并行化运行器内部的测试。

我的 X 问题是我在测试子类时试图排除超类行为。每个子类都应该有自己的子类测试(可以并行化),而且还要练习从超类继承的行为。怎么一个?

编辑:我发现这两个 2007 年的帖子似乎暗示我所要求的内容不兼容/不可能。从那以后有更新吗?

4

2 回答 2

5

Test::Class本身不支持并行化。可能最简单的解决方案是.t为每个测试类(或测试类的逻辑组)设置单独的运行器,并使用例如prove -j9.

如果您真的想并行运行所有测试,您可以编写一个简单的脚本来.t为每个测试类自动生成一个文件。您将失去在单个 perl 解释器中运行多个测试类的性能优势,但并行化可能会补偿额外的启动开销。而且我认为,无论Test::Class提供多少测试隔离,在 Perl 中都无法保证这一点。一旦您开始利用修改符号表以进行模拟等目的,您的测试将开始相互干扰,除非您始终正确进行清理。在单独的 perl 解释器中运行每个测试是提供保证隔离的更好方法。

于 2013-06-25T21:06:35.403 回答
3

为了使 Test::Class 并行,我使用了以下机制。希望它可以帮助你。

我已经使用该Parallel::ForkManager模块来调用测试。但是有

参数化TEST_METHOD环境变量,以便运行所需的测试

在每个线程中并行

这提供了其他测试之间的隔离,因为每个测试都是独立调用的,并且

线程进程被管理等待直到所有子进程完成

于 2013-06-27T05:26:00.323 回答