PHPunit отличается начальной загрузкой для всех тестовых пакетов - PullRequest
16 голосов
/ 02 марта 2012
<phpunit backupGlobals="false" colors="true">
    <testsuite name="app1" >
        <directory>./app1</directory>
    </testsuite>
    <testsuite name="app1" >
        <directory>./app2</directory>
    </testsuite>
</phpunit>

Как я могу заставить первый и второй тесты загружать разные бутстрапы?

Ответы [ 3 ]

21 голосов
/ 11 мая 2015

То, что я сделал, - это прослушиватель.

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
        }
    }
}
12 голосов
/ 06 марта 2012

Вы можете создать два разных файла начальной загрузки и два разных файла конфигурации 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/

Я делаю это с помощью модульных / интеграционных тестов.

3 голосов
/ 04 марта 2012

Вы не можете.

PHPUnit позволяет указывать только один файл начальной загрузки, и вам нужно настроить все так, чтобы каждый тестовый набор каждого тестового пакета мог потенциально выполняться, а PHPUnit не знал, как его запустить "установочный код для каждого комплекта тестов из xml-файла начальной загрузки.

При использовании классов с phpunit 3.6, не рекомендуется использовать TestSuite классы, вы можете сделать это в этих классах, но я предлагаю просто запустить весь ваш общий загрузочный кодв вашем bootstrap.php и если вам нужна специальная настройка для тестов в app1 и app2, чтобы иметь App1_TestCase, от которого вы наследуете.

Если App1 действительно будет целым приложением, я бы предложил иметь два отдельныхпроекты с собственными тестами и установочным кодом и без попыток запустить их за один прогон phpunit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...