如何运行特定的phpunit xml testsuite?


83

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

$ phpunit-配置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>

Answers:


125

这是类似于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配置重复!


我的问题是<directory>会被忽略。没有执行测试。如果我用<file>指定它们,它们可以正常运行,但是我不能手动全部指定它们!它们确实遵循Test.php文件和类名约定。理念?
亚历山大·莫兰德

您可以共享您的配置文件吗?小细节通常是可疑的。
乔什·伍德考克


20

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

但是还有另一种选择,您可以简单地将路径传递给phpunit。

phpunit library/XXX

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

如果这还不足以满足您的需要,则另一个选择是使用@group批注将测试划分为不同的类别,然后可以有选择地运行这些类别。


好吧,正如您在我的帖子中看到的那样,这并不是我真正需要的
Andreas Linden 2010年

正如我的答案的第一个链接所指出的,那么您无能为力。
Anti Veeranna

3

从phpunit 6.1开始,您可以在xml配置文件中使用attribute defaultTestSuite,就像使用默认选项一样phpunit --testsuite xxx,它会被覆盖。


1

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


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>

假设,假设您的目录“库”包含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();
   }
 }
 ?>

现在,为了获得所需的功能,只需对所需的组运行“ config”。

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

就像我说的那样,这很丑陋,当然也不是很好的代码,因为它将需要不断的维护,但是它将为您提供所需的功能。

希望Bergmann在他的下一轮会增加这个功能,尽管似乎不太可能忽略了它

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.