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

0

Решение

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,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]