如何跳过 PHPunit 中的测试?
Posted
技术标签:
【中文标题】如何跳过 PHPunit 中的测试?【英文标题】:How to skip tests in PHPunit? 【发布时间】:2012-05-01 15:04:14 【问题描述】:我正在使用 phpunit 与 jenkins 连接,我想通过在 XML 文件 phpunit.xml
中设置配置来跳过某些测试
我知道我可以在命令行上使用:
phpunit --filter testStuffThatBrokeAndIOnlyWantToRunThatOneSingleTest
由于<filters>
标签仅用于代码覆盖,我该如何将其转换为 XML 文件?
我想运行除testStuffThatAlwaysBreaks
之外的所有测试
【问题讨论】:
KO:修复测试怎么样?顺便说一句,来自 Welly 的你好 ;-) 我没有写测试,这无关紧要,也不想更改核心文件 毫无疑问你可以这样做。这是一个很奇怪的要求 PS:您提到了过滤器 - 但它无法帮助您,因为它排除了所有路径。否则<exclude>
- 会为你做这项工作
你能发布建议的 phpunit.xml.dist 文件吗?
【参考方案1】:
有时,根据定义为 php 代码的自定义条件跳过特定文件中的所有测试很有用。您可以使用 setUp 函数轻松做到这一点,其中 makeTestSkipped 也可以工作。
protected function setUp()
if (your_custom_condition)
$this->markTestSkipped('all tests in this file are invactive for this server configuration!');
your_custom_condition 可以通过一些静态类方法/属性、phpunit 引导文件中定义的常量甚至全局变量来传递。
【讨论】:
什么是Config
类?我应该把它放在哪里?
@cronfy 它可以是任何全局范围可访问类(单例/注册设计模式),甚至可以是 phpunit 引导文件中设置的全局变量。基本上逻辑是: if ($testsFromThisFileShouldBeSkipped) $this->markTestSkipped(...);
删除条件,你的答案将是直截了当的......“markTestSkipped 在设置中跳过整个文件”
@SparK 我明白你的意思,但我提供了 有条件 跳过整个测试类的方法。我对其进行了一些更改,删除了我的自定义方式以支持一般规则。【参考方案2】:
跳过已损坏或您需要稍后继续工作的测试的最快和最简单的方法是将以下内容添加到您的单个单元测试的顶部:
$this->markTestSkipped('must be revisited.');
【讨论】:
您总是可以将目录或测试添加到 xml 配置文件中,但是,如果这是一个控制器或类似的东西,那真的不太实用,因为您可能在该文件中有许多其他测试。我想如果您无法访问单元测试,不确定我是否理解原因,那么您别无选择,只能排除。 因为它是一个静态方法(至少在 PHPUnit 3 中),并且一些类使用后期静态绑定 afaik,你应该使用static::markTestSkipped('');
而不是$this->
。它将在较新的 PHP 版本中生成警告。签名:public static function markTestSkipped($message = '')
需要一个更好的完整单元测试文件示例。不只是一个 sn-p。
@DanielW。 official phpunit manual 的示例显示 $this->markTestSkipped()
@nulll 可以看到in the sourcecode of 6.5,markTestSkipped()
仍然是静态方法。【参考方案3】:
如果你可以忽略整个文件,那么
<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
<testsuites>
<testsuite name="foo">
<directory>./tests/</directory>
<exclude>./tests/path/to/excluded/test.php</exclude>
^-------------
</testsuite>
</testsuites>
</phpunit>
【讨论】:
测试运行大约需要 20 分钟,有没有一种简单的方法可以查看它将运行多少测试?目前,我必须等到第一行完成....... 63 / 893 ( 7%)
@Filype:那么您可能指定了错误的路径。这对我来说很有用。不确定是否有可能获得测试计数。 PS:单元测试不应该运行这么久。我建议使用 @group
注释并按其性质拆分测试以上是关于如何跳过 PHPunit 中的测试?的主要内容,如果未能解决你的问题,请参考以下文章