如何运行特定的phpunit xmltesting套件?

我如何select一个特定的testing套件来执行?

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

这里的代码就像PHPUnit 3.7.13一样

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

如果你想运行一组testing套件,那么你可以做到这一点

 <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目前不支持这样的嵌套testing套件

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

所以,如果你想以这种方式运行testing套件组,你必须有XMLconfiguration的重复!

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

但是有一个select,你可以简单地传递一个path给phpunit。

 phpunit library/XXX 

这将运行库/ XXX目录中的所有testing

如果这还不够,另一个select是使用@group注释将testing划分为不同的类别,然后可以select性地运行。

另一种select是为每个testing套件单独创build一个单独的configuration文件。 有一些开销,你可能需要复制/粘贴重复的设置,但你可以根据需要指定每个configuration文件。

这里的其他答案是正确的。 你不能这样做使用XMLconfiguration,你可以做什么,虽然是在PHP中使相同types的configuration。

这当然不是最漂亮的事情,但它应该给你你需要的function。

您提供了xmlconfiguration

 <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()

对于configuration我们将创build一个包含一切的configuration:

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

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

 class LibraryConfigTest extends PHPUnit_Framework_TestCase { 

每个“testing套件”只是一个运行你想要的testing的方法。 无论你想要什么,都要命名方法,我们再也不会真的使用它了。 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(); } } ?> 

现在为了获得你想要的function,只需要对你想要的组运行“config”。

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

正如我所说,这是丑陋的,当然不是好的代码,因为它需要不断的维护,但它会给你你正在寻找的function。

希望Bergmann能够在下一轮增加这个function,尽pipe看起来似乎不太可能,因为他似乎很忽略它 。

从phpunit 6.1开始,您可以在xmlconfiguration文件中使用属性defaultTestSuite ,这就像使用默认选项phpunit --testsuite xxx并被覆盖一样。