PHP为所有测试套件提供不同的bootstrap

时间:2012-03-02 14:39:49

标签: php phpunit

<phpunit backupGlobals="false" colors="true">
    <testsuite name="app1" >
        <directory>./app1</directory>
    </testsuite>
    <testsuite name="app1" >
        <directory>./app2</directory>
    </testsuite>
</phpunit>

如何让第一次和第二次测试加载不同的bootstrap?

3 个答案:

答案 0 :(得分:20)

我所做的就是拥有一名听众。

<强> 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
        }
    }
}

答案 1 :(得分:12)

您可以创建两个不同的引导程序文件和两个不同的配置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/

我使用单元/集成测试来完成此任务。

答案 2 :(得分:3)

你不能。

PHPUnit只允许您指定一个引导程序文件,并且您需要设置所有内容,以便每个测试套件的每个测试用例都可能被执行,并且PHPUnit没有如何从引导程序xml文件为每个测试套件运行“设置”代码

使用时,使用phpunit 3.6不鼓励TestSuite类,你可以在那些类中执行,但我的建议是在bootstrap.php中运行所有通用引导程序代码,是否需要特殊的测试设置在app1和app2中有一个App1_TestCase你继承。

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