如何跳过PHPunit中的测试?

如何跳过PHPunit中的测试?,php,phpunit,Php,Phpunit,我正在与jenkins一起使用phpunit,我想通过在XML文件phpunit.XML 我知道我可以在命令行上使用: phpunit——过滤断开的测试内容,并仅过滤单个测试 既然标记仅用于代码覆盖,我如何将其转换为XML文件 如果您可以忽略整个文件,我想运行所有测试,而不是总是出现漏洞的测试 <?xml version="1.0" encoding="UTF-8"?> <phpunit> <testsuites> <test

我正在与jenkins一起使用phpunit,我想通过在XML文件
phpunit.XML

我知道我可以在命令行上使用:

phpunit——过滤断开的测试内容,并仅过滤单个测试

既然
标记仅用于代码覆盖,我如何将其转换为XML文件


如果您可以忽略整个文件,我想运行所有测试,而不是总是出现漏洞的
测试

<?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>

/测试/
./tests/path/to/excluded/test.php
^-------------

跳过已损坏或需要以后继续进行的测试的最快、最简单的方法是在单个单元测试的顶部添加以下内容:

$this->markTestSkipped('must be revisited.');

有时,根据定义为php代码的自定义条件,跳过特定文件中的所有测试非常有用。您可以使用makeTestSkipped工作的setUp函数轻松地完成这项工作

protected function setUp()
{
    if (your_custom_condition) {
        $this->markTestSkipped('all tests in this file are invactive for this server configuration!');
    }
}

您的自定义条件可以通过一些静态类方法/属性、phpunit引导文件中定义的常量甚至全局变量来传递。

KO:修复测试怎么样?顺便说一句,你好,来自威利;-)我没有编写测试,这是一些不相关的东西,也不想更改核心文件——毫无疑问,您可以这样做。这是一个非常奇怪的要求:您提到了过滤器,但它不能帮助您,因为它排除了所有路径。否则,
-你可以发布建议的phpunit.xml.dist文件吗?这是我尝试过的,但它仍然说没有
的893个测试和带有
的893个测试运行大约需要20分钟,有没有简单的方法可以查看它将运行多少个测试?目前,我必须等到第一行完成
。。。。。。。63/893(7%)
@fitype:那么您可能指定了错误的路径。它对我很有效。不确定是否有可能获得测试计数。PS:单元测试不应该运行太长时间。我建议使用
@group
注释和按性质拆分测试。您始终可以将目录或测试添加到xml配置文件中,但是,如果这是一个控制器或类似文件,这实际上并不实用,因为该文件中可能有几十个其他测试。我猜如果您没有访问单元测试的权限,我不知道为什么,那么您除了排除之外别无选择。因为它是一个静态方法(至少在PHPUnit 3中),并且一些类使用后期静态绑定afaik,您应该使用
static::markTestSkipped(“”)
而不是
$this->
。它将在较新的PHP版本中生成警告。签名:
公共静态函数markTestSkipped($message='')
需要完整单元测试文件的更好示例。不仅仅是一个片段。@DanielW。示例显示了
$this->markTestSkipped()
@null您可以看到,
markTestSkipped()
仍然是一个静态方法。什么是
Config
类?我把它放在哪里?@cronfy它可以是任何全局作用域可访问类(单例/寄存器设计模式),甚至可以是phpunit中引导文件中设置的全局变量。基本上,逻辑是:如果($testsfromthisfilesshouldbeskipped){$this->markTestSkipped(…);}删除条件,您的答案将是直接的。。。“markTestSkipped在安装程序中跳过了整个文件”@SparK我明白你的意思,但我提供了有条件跳过整个测试类的方法。我对它做了一点修改,取消了我习惯的做法,取而代之的是一般规则。