2010-09-08 108 views
53

我该如何选择特定的测试套件来执行?如何运行特定的phpunit xml测试套件?

$ 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

X-Ref:[在PHPUnit中默认运行单个测试套件](https://stackoverflow.com/q/37820193/367456) – hakre 2017-08-02 21:45:20

回答

76

下面的代码,就好像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配置的重复!

+0

我有问题,简单地被忽略。没有执行测试。如果我用指定它们运行良好,但我不能手动指定它们!他们遵循Test.php文件和类名称约定。理念? – 2013-03-06 15:37:12

+0

你能分享你的配置文件吗?细节往往往往是嫌疑犯。 – 2013-03-10 06:16:00

+0

http://stackoverflow.com/questions/15249469/phpunit-does-not-find-any-tests-with-director-xml-tag-but-does-with-some-file – 2013-03-18 12:36:01

17

在PHPUnit的用户邮寄这些消息就证明这不是PHPUnit中的当前版本可能清单:http://thread.gmane.org/gmane.comp.php.phpunit.user/1302

但还有一种选择,你可以简单地传递一个路径PHPUnit的。

phpunit library/XXX 

这将运行库/ XXX目录

所有的测试。如果这还不够你的,另一种选择是使用@group annotation来测试分成,可以进行选择性运行不同的类别。

+0

好吧,您可以在我的发布中看到,这不完全是我需要的 – 2010-09-12 21:34:42

+0

然后就没有什么可以做的了,正如我在答案的第一个链接中指出的那样。 – 2010-09-13 05:14:06

2

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

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会在他的下一轮中增加这个功能,尽管看起来似乎不太可能,因为他看起来几乎是ignoring it

2

从phpunit 6.1开始,您可以在xml配置文件中使用属性defaultTestSuite,这就像使用默认选项phpunit --testsuite xxx并被重写。

相关问题