Codeception/AspectMock Родительский класс не найден локатором i Yii2

Я пытаюсь использовать Codeception/AspectMock в тестах Yii2. У меня есть два класса:

Один:

namespace backend\baseModel;
class BaseModel
{
    public static function getId()
    {
        return 9;
    }
}

Второй:

use \backend\baseModel\BaseModel;

class ModelA extends BaseModel
{
    public static function getId()
    {
        return 5;
    }
}

Я пытаюсь протестировать ModelA:

class TestModel extends \Codeception\Test\Unit
{

    public function testGetId()
    {
        test::double(ModelA::getId(), ['getId' => 7]);
        $this->assertSame(7, ModelA::getId());
    }
}

Я сделаю тест с ошибкой:

1) TestMode: Get id
 Test  tests/unit/TestModelTest.php:testGetId

  [InvalidArgumentException] Class backend\baseModel\BaseModel was not found by locator

#1  /var/www/vendor/goaop/parser-reflection/src/ReflectionEngine.php:125
#2  /var/www/vendor/goaop/parser-reflection/src/ReflectionEngine.php:140
#3  /var/www/vendor/goaop/parser-reflection/src/ReflectionClass.php:44
#4  /var/www/vendor/goaop/parser-reflection/src/ReflectionClass.php:150
#5  /var/www/vendor/goaop/parser-reflection/src/Traits/ReflectionClassLikeTrait.php:446
#6  /var/www/vendor/goaop/parser-reflection/src/Traits/ReflectionClassLikeTrait.php:924
#7  /var/www/vendor/goaop/parser-reflection/src/Traits/ReflectionClassLikeTrait.php:317
#8  /var/www/vendor/goaop/parser-reflection/src/Traits/ReflectionClassLikeTrait.php:303
#9  /var/www/vendor/goaop/framework/src/Instrument/Transformer/CachingTransformer.php:121
#10 /var/www/vendor/goaop/framework/src/Instrument/Transformer/CachingTransformer.php:78

Мой файл конфигурации:

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
defined('YII_APP_BASE_PATH') or define('YII_APP_BASE_PATH', __DIR__.'/../../');

require_once(YII_APP_BASE_PATH . '/vendor/autoload.php');
$kernel = \AspectMock\Kernel::getInstance();
$kernel->init([
    'debug' => true,
    'cacheDir'     => __DIR__ . '/_data/cache',
    'includePaths' => [__DIR__.'/../../backend'],
]);
$kernel->loadFile(YII_APP_BASE_PATH . '/vendor/yiisoft/yii2/Yii.php');

Я попробовал решение, предложенное здесь (в первом ответе): Codeception/AspectMock Родительский класс не найден локатором

Ошибка перестает появляться, но потом метод getId() возвращает 5 вместо 7.


person Łukasz Górowski    schedule 13.11.2018    source источник
comment
Я ошибся в строке test :: double (ModelA :: getId (), ['getId' => 7]);, должно быть test :: double (ModelA :: class, ['getId' => 7] ) . Таким образом, они работают правильно. Извините за путаницу   -  person Łukasz Górowski    schedule 14.11.2018


Ответы (1)


У вас есть статический метод, и вы переопределяете функцию getId в ModelA, а в тесте вы вызываете класс ModelA, поэтому в вашем случае он должен вернуть 5.

person borisaeric    schedule 13.11.2018