PHPunit разный бутстрап для всех тестов
<phpunit backupGlobals="false" colors="true">
<testsuite name="app1" >
<directory>./app1</directory>
</testsuite>
<testsuite name="app1" >
<directory>./app2</directory>
</testsuite>
</phpunit>
Как я могу сделать первый и второй тесты для загрузки разных загрузочных файлов?
Ответы
Ответ 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.