【问题标题】:Run multiple test suites with PHPUnit使用 PHPUnit 运行多个测试套件
【发布时间】:2014-04-25 05:35:31
【问题描述】:

在我的phpunit.xml 中,我定义了许多<testsuite>,每个都定义了我要测试的应用程序的不同方面。在开发过程中,我不一定要运行每个测试套件,只需要运行我正在处理的方面。

但是,当我想测试我的完整应用程序时,我想指定多个要运行的测试套件。有没有办法从命令行做到这一点?

【问题讨论】:

  • 如果我理解正确的话,您当前运行测试时添加了--testsuite <pattern> 过滤器来确定要运行哪个测试套件。如果这是真的,只需离开这个过滤器来运行整个测试,或者定义--groups。
  • groups 的文档完全无法理解。根本没有解释组的用途或如何应用它们。如果您可以添加一个非常感谢的示例的答案:phpunit.de/manual/3.7/en/…
  • 有多种方法可以做到这一点。请用一些关于你当前如何运行它的示例代码来更新你的问题,然后我会看看。顺便说一句,phpunit 文档非常广泛,但是要使用 @group-option 标记测试,然后使用 phpunit --group MyGroup-syntax 运行它,就没有更多可说的了(至少在我看来)。
  • 谢谢比约恩。那不是很有帮助。您能否指出有关如何使用组的“相当广泛”的文档?用代码更新我的问题?什么代码?一个例子正是我正在寻找的..

标签: unit-testing phpunit


【解决方案1】:

您可以使用@group 注释来执行此操作。这是annotations in phpUnit 的文档。

您可以通过将@group examplegroup 放在您希望加入该组的每个测试类上方的 php 文档块中来指定测试所属的组。

例如:

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

【讨论】:

  • 这比我想要的要好!谢谢
【解决方案2】:

使用最新版本的 PHPUnit(自 v6.1 起),您可以简单地用逗号 (--testsuite &lt;name,...&gt;) 分隔套件。

例如:phpunit --testdox --testsuite Users,Articles

文档:https://phpunit.readthedocs.io/en/8.0/textui.html?highlight=--testsuite#command-line-options

【讨论】:

    【解决方案3】:

    如果您的每个测试套件都有不同的命名空间,您可以使用 --filter 选项过滤运行的测试。

    例如:phpunit --filter '/Controller|Tools/'

    所有具有与正则表达式匹配的命名空间的测试都将被执行。

    phpunit options documentation 中有更多示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-24
      • 2016-10-15
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      相关资源
      最近更新 更多