【问题标题】:For Devel::Cover to cover all files in specific paths让 Devel::Cover 覆盖特定路径中的所有文件
【发布时间】:2020-12-27 23:01:53
【问题描述】:

我的任务是清理一些写得不好但测试数量惊人的遗留代码。其中一些测试在如下文件中运行代码:

fcgi/*.fcgi

我非常希望将这些内容包含在我的报道报告中。事实上,我很想确保我可以在 lib/、fcgi/ 和 utils/ 中包含 everything(无论扩展名如何),而 nothing 在任何其他目录。

这是我的众多尝试之一:

HARNESS_PERL_SWITCHES=-MDevel::Cover=+inc,fcgi,+inc,lib,+inc,util prove -rl t

失败!

I've also tried creating simple Build.PL or Makefile.PL scripts 并在我运行诸如“cover -test”或“./Build testcover”之类的东西时不断收到“未定义测试”。

这是 Devel::Cover 0.88 和 perl 版本 5.12.2

【问题讨论】:

  • 您能否创建一个包含 makefile.pl、一些 .t 文件和一个普通 .pm 以及一些其他正在调用但未正确覆盖的文件的最小测试用例 tarball?如果我有,我相信我可以为您提供正确的配置。
  • Mithaldu:我刚刚创建了它。 PM我你的邮箱,我发过去。谢谢!
  • (不完全相同,但对于通过 Google 找到此内容的其他人)在类似的情况下,我添加了 Test::UseAllModules 以提取我所有的 lib/**/*.pm 文件。这样cover -test 就知道所有这些,包括那些未经测试的。 This article by David Farrell 展示了如何基于 glob 提取其他文件。

标签: perl testing devel-cover


【解决方案1】:

好吧,我举了你的例子,稍微摆弄了一下,它似乎对我来说用最小的 Makefile.PL 和覆盖测试工作得很好。请克隆这个:git://gist.github.com/3061026.git

README 文件包含在我的系统上发生的事情。

具体来说,在我的一个测试文件中,我添加了:

use 5.12.0;
use Test::More;

use lib 'lib';

use Foo;
require 'fcgi/foo.fcgi';   # <====== pull in an fcgi file

is craptastic(), 'This is craptastic',
    'We have run an fcgi/*fcgi test';

【讨论】:

  • 在真实系统中,我一直使用最小的 Makefile 得到“没有运行测试”。然而,正确的咒语(prove)似乎是:HARNESS_PERL_SWITCHES=-MDevel::Cover=+inc,t,+select,fcgi proof -l t
  • 很奇怪。也许你的 EUMM 已经老了?
  • Mithaldu,我必须在星期一再次调查。我发布的示例适用于我的“最小测试用例”,但不适用于真正的代码库。
  • GitHub 上的要点:gist.github.com/wchristian/3061026
  • 如果您使用-MDevel::Cover=+inc,lib,所有类型的模块都会包含在统计信息中,因为lib 在它们的绝对路径中。这并不能解决从我的项目中强制所有文件的实际问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
相关资源
最近更新 更多