Тестовый класс 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,

Другие вопросы по тегам