Подтвердить что ты не робот

PHPunit разный бутстрап для всех тестов

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

Как я могу сделать первый и второй тесты для загрузки разных загрузочных файлов?

4b9b3361

Ответ 1

Вы не можете.

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

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

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

Ответ 2

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

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

Ответ 3

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

Я делаю это с помощью тестов unit/integration.