2012-03-02 74 views
13
<phpunit backupGlobals="false" colors="true"> 
    <testsuite name="app1" > 
     <directory>./app1</directory> 
    </testsuite> 
    <testsuite name="app1" > 
     <directory>./app2</directory> 
    </testsuite> 
</phpunit> 

如何使第一个和第二个测试程序加载不同的引导程序?PHPunit针对所有测试套件的不同引导程序

回答

2

你不能。

PHPUnit的只允许你指定一个启动文件,你需要设置的一切,让每一个测试套件的每个测试用例可能被执行,PHPUnit的具有运行“安装程序”的代码为每个测试套件从引导XML没怎么文件。

在使用,在PHPUnit 3.6气馁,TestSuite类你可以做这些,但我的建议是只运行所有通用引导代码在你bootstrap.php中,你应该需要在APP1测试和特殊的设置在app2中有一个App1_TestCase您继承。

如果App1真的是一个整体应用程序我建议有两个单独的项目与他们自己的测试和设置代码,而不是试图在一个phpunit运行中运行它们。

11

您可以创建两个不同的引导文件和两个不同的配置XML文件

app1.xml

<phpunit bootstrap="app1BootstrapFile.php" colors="true"> 
    <testsuite name="app1" > 
     <directory>./app1</directory> 
    </testsuite> 
</phpunit> 

app2.xml

<phpunit bootstrap="app2BootstrapFile.php" backupGlobals="false" colors="true"> 
    <testsuite name="app2" > 
     <directory>./app2</directory> 
    </testsuite> 
</phpunit> 

运行:

$phpunit --configuration app1.xml app1/ 
$phpunit --configuration app2.xml app2/ 

如果你运行一个测试很多更多的,其他(比如APP1),命名XML phpunit.xml,你可以只运行

$phpunit app1/ 
$phpunit --configuration app2.xml app2/ 

我做到这一点,单位/集成测试。

+0

我不认为这是一个好主意,因为有你需要10个不同的引导文件,根据您的解决方案,创建10个phpunitblabla.xml文件 – smarber 2015-08-05 10:20:49

13

我做的是有一个听众。

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit bootstrap="./phpunit_bootstrap.php" 
    backupGlobals="false" 
    backupStaticAttributes="false" 
    verbose="true" 
    colors="true" 
    convertErrorsToExceptions="true" 
    convertNoticesToExceptions="true" 
    convertWarningsToExceptions="true" 
    processIsolation="false" 
    stopOnFailure="false" 
    syntaxCheck="true"> 
    <testsuites> 
     <testsuite name="unit"> 
      <directory>./unit/</directory> 
     </testsuite> 
     <testsuite name="integration"> 
      <directory>./integration/</directory> 
     </testsuite> 
    </testsuites> 
    <listeners> 
     <listener class="tests\base\TestListener" file="./base/TestListener.php"></listener> 
    </listeners> 
</phpunit> 

然后TestListener.php

class TestListener extends \PHPUnit_Framework_BaseTestListener 
{ 
    public function startTestSuite(PHPUnit_Framework_TestSuite $suite) 
    { 
     if (strpos($suite->getName(),"integration") !== false) { 
      // Bootstrap integration tests 
     } else { 
      // Bootstrap unit tests 
     } 
    } 
} 
相关问题