使用PHPUnit运行多个测试套件

3
在我的 phpunit.xml 文件中,我定义了许多不同的 <testsuite> 来测试应用程序的不同方面。在开发过程中,我并不想运行所有测试套件,只需运行我正在开发的部分即可。
然而,在测试整个应用程序时,我希望可以指定运行多个测试套件。有没有办法通过命令行来实现这一点?

如果我理解正确的话,您目前在运行测试时添加了“--testsuite <pattern>”过滤器来确定要运行哪个测试套件。如果是这样,请将此过滤器去掉以运行整个测试集,或者定义“--group”。 - Bjoern
groups 的文档完全无法理解。根本没有解释 groups 的用途或如何应用它们。如果您能提供一个带有示例的答案,那将不胜感激:http://phpunit.de/manual/3.7/en/appendixes.configuration.html#appendixes.configuration.groups - Luke
有多种方法可以实现这个。请更新您的问题,提供一些您当前运行它的示例代码,然后我会看一下。顺便说一句,phpunit文档非常详细,但是要使用@group选项标记测试,然后使用phpunit --group MyGroup语法运行它,就没有更多可说的了(至少在我看来)。 - Bjoern
谢谢Bjoern。那并没有什么帮助。你能指向关于如何使用组的“相当广泛”的文档吗?更新我的问题与代码?什么代码?一个例子正是我正在寻找的。 - Luke
3个回答

4

4
你可以使用@group注解来实现此操作。这里是有关phpUnit中注释的文档
你可以通过在每个测试类上面的php docblock 中加入@group examplegroup来指定一个测试属于哪个组。
例如:
<?php
/**
 * @group examplegroup
 *
 */
class StackTest extends PHPUnit_Framework_TestCase
{
    public function testPushAndPop()
    {
        $stack = array();
        $this->assertEquals(0, count($stack));

        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertEquals(1, count($stack));

        $this->assertEquals('foo', array_pop($stack));
        $this->assertEquals(0, count($stack));
    }
}
?>

从命令行运行组的方法如下:

phpunit --group examplegroup


该命令将运行名为“examplegroup”的测试组。

那比我所期待的要好!谢谢。 - Jdahern

3
如果你的每个测试套件都有不同的命名空间,你可以使用--filter选项来过滤要运行的测试。
例如:phpunit --filter '/Controller|Tools/' 所有命名空间与正则表达式匹配的测试都将被执行。
更多示例请参阅phpunit选项文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接