В настоящее время у меня есть базовый тестовый класс, где мои тесты должны расширяться:
<?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
,
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
,
Других решений пока нет …