如何运行特定的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
并被覆盖一样。