如何选择要执行的特定测试套件?
$ 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>
答案 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。