Тестовый класс PHPUnit не может расширять другой класс
В настоящее время у меня есть базовый тестовый класс, где мои тесты должны расширяться:
<?php
namespace BlaBla;
class BasicTestCase extends UnitTest {
public function testPage()
{
$this->assertTrue(True);
}
}
И там в моем тестовом классе:
<?php
use BlaBla\BasicTestCase;
class BasicTest extends BasicTestCase {
}
Моя проблема в том, что если я запускаю phpunit и хочу проверить BasicTest
всегда получаю ошибку BasicTestCase class not found
,
После поиска я понял, что phpunit не использует composer, но я не смог разрешить этот конфликт.
Обновить:
С помощью require_once
, или же composer dump-autload
просто выдает ту же ошибку (класс Base не найден).
Также предоставление пространства имен для класса, не решило проблему (всегда одна и та же ошибка).
Вот файл phpunit.xml:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="phpunit.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false">
<testsuites>
<testsuite name="Application Test Suite">
<directory>./tests/</directory>
</testsuite>
<testsuite name="Core Test Suite">
<directory>./vendor/ipo/prodis-core/tests/</directory>
</testsuite>
</testsuites>
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="sqlite_testing"/>
</php>
Файл composer.json такой длинный, поэтому я добавил сюда импорт:
"autoload-dev": {
"classmap": [
"tests/AppTestCase.php",
"tests/AppTestCaseClassic.php",
"vendor/ipo/prodis-core/tests/TestCase.php"
]
},
Для структуры я добавил второй класс BasicTest
, под папкой тесты Laravel, под Services\Client\Testing
,
Я заметил, что phpunit всегда ищет Base class
в том же месте BasicTest
,
1 ответ
bootstrap="phpunit.php"
Эта строка означает, что PHPUnit будет включать phpunit.php
файл (из корня проекта) перед запуском тестов - вы должны включить в него автозагрузчик:
<?php
require __DIR__ . '/vendor/autoload.php';
// rest of tests bootstrap
Или, если вам не нужен какой-либо дополнительный загрузчик, вы можете включить автозагрузчик непосредственно в качестве файла начальной загрузки в phpunit.xml
:
bootstrap="vendor/autoload.php"
Отдельная вещь - это правила автозагрузки. Трудно сказать, что происходит в вашем случае, потому что вы не поделились своими файлами. Но если вы используете пространства имен для тестов базовых классов, вы можете просто зарегистрировать обычные psr-4
правила автозагрузки для этих классов:
"autoload-dev": {
"psr-4": {
"BlaBla\\": "tests/"
}
},
А затем поместите свой BasicTestCase
определение класса в tests/BasicTestCase.php
,