如何运行特定的phpunit xml testsuite?

时间:2010-09-08 20:39:11

标签: xml phpunit

如何选择要执行的特定测试套件?

  

$ phpunit --configuration config.xml

config.xml中:

<testsuites>
    <testsuite name="Library">
        <directory>library</directory>
    </testsuite>
    <testsuite name="XXX_Form">
        <file>library/XXX/FormTest.php</file>
        <directory>library/XXX/Form</directory>
    </testsuite>
</testsuites>

5 个答案:

答案 0 :(得分:105)

这里的代码好像是PHPUnit 3.7.13

$ phpunit --configuration config.xml --testsuite Library
$ phpunit --configuration config.xml --testsuite XXX_Form

如果您想运行一组测试套件,那么您可以执行此操作

<testsuites>
  <testsuite name="Library">
    <directory>library</directory>
  </testsuite>
  <testsuite name="XXX_Form">
    <file>library/XXX/FormTest.php</file>
    <directory>library/XXX/Form</directory>
  </testsuite>
  <testsuite name="Both">
    <directory>library</directory>
    <file>library/XXX/FormTest.php</file>
    <directory>library/XXX/Form</directory>
  </testsuite>
</testsuites>

然后

$ phpunit --configuration config.xml --testsuite Both

不幸的是,PHPUnit目前不支持像这样的嵌套测试套件

<testsuites>
    <testsuite name="Both">
      <testsuite name="Library">
        <directory>library</directory>
      </testsuite>
      <testsuite name="XXX_Form">
        <file>library/XXX/FormTest.php</file>
        <directory>library/XXX/Form</directory>
      </testsuite>
  </testsuite>
</testsuites>

因此,如果您想以这种方式运行测试套件组,则必须重复xml配置!

答案 1 :(得分:20)

这在当前版本的PHPUnit中是不可能的,如phpunit-user邮件列表中的这些消息所示:http://thread.gmane.org/gmane.comp.php.phpunit.user/1302

但是有一个替代方案,你可以简单地将路径传递给phpunit。

phpunit library/XXX

这将运行library / XXX目录中的所有测试

如果这还不够,另一种选择是使用@group annotation将测试分成不同的类别,然后可以有选择地运行。

答案 2 :(得分:3)

从phpunit 6.1开始,您可以在xml配置文件中使用属性defaultTestSuite,这类似于使用默认选项phpunit --testsuite xxx并被覆盖。

答案 3 :(得分:1)

另一种选择是为您要单独测试的每个测试套件创建单独的配置文件。您可能需要复制/粘贴重复设置,但您可以根据需要指定每个配置文件。

答案 4 :(得分:1)

这里的其他答案都是正确的。你不能使用xml配置执行此操作,但你可以做的是在php中使用相同类型的配置。

它当然不是最漂亮的东西,但它应该为您提供所需的功能。

您提供了xml配置

<testsuites>
  <testsuite name="Library">
    <directory>library</directory>
  </testsuite>
  <testsuite name="XXX_Form">
    <file>library/XXX/FormTest.php</file>
    <directory>library/XXX/Form</directory>
  </testsuite>
</testsuites>

假设,假设您的目录“library”包含3个文件:

library
   XXX    
     FormTest.php
   Unit
     unittest1.php
     unittest2.php

并且每个文件都包含1个完美命名约定的测试,例如:FormTest包含testForm()

对于配置,我们将创建一个包含所有内容的配置:

<?php
include_once "library/XXX/FormTest.php";
include_once "library/Unit/unittest1.php";
include_once "library/Unit/unittest2.php";

然后我们将通过phpunit命名约定创建一个类。你可以随意命名,因为我们永远不会真正使用它......

class LibraryConfigTest extends PHPUnit_Framework_TestCase {

每个“测试套件”都只是一个运行所需测试的方法。将方法命名为您想要的,再次,我们永远不会实际使用它。 Phpunit将负责运行。请确保将它们分组到组中,以便您知道如何执行。

/**
 * All Tests in Library
 * @group Library
**/
   public function testLibrary() {
      UnitTest1::testUnit1();
      UnitTest2::testUnit2();
      FormTest::testForm();
   }

/**
 * All Form tests in library/XXX
 * @group XXX_Form
**/
   public function testForm() {
      FormTest::testForm();
   }
 }
 ?>

现在,为了获得您想要的功能,只需针对您想要的组运行“配置”。

phpunit --group XXX_Form library_config.php
phpunit --group Library library_config.php

正如我所说,这是丑陋的,当然不是很好的代码,因为它需要不断的维护, 但它会为您提供所需的功能。

希望Bergmann将在他的下一轮中添加这个功能,虽然看起来不太可能,因为他看起来几乎是ignoring it