2010-09-08 90 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並被重寫。

相關問題