未找到方面模拟 'Go\ParserReflection\ReflectionFile'

Aspect mock 'Go\ParserReflection\ReflectionFile' not found

我正在尝试将方面模拟与代码测试一起使用。

从他们的文档中不清楚如何配置。

https://github.com/Codeception/AspectMock

Include AspectMock\Kernel into tests/_bootstrap.php.

我没有这样的文件。我应该创建它吗?我应该在哪里添加它?

我的codeception目录结构是:

test/codeception/acceptance.

我在 test/codeception/acceptance 中有文件 SummaryCest.php。

因为我没有 _bootstrap.php 文件,所以我决定在 SummaryCest 中尝试 - 在声明 class:

之前
include __DIR__.'/../../../vendor/autoload.php'; // composer autoload

$kernel = \AspectMock\Kernel::getInstance();
$kernel->init([
    'debug' => true,
    'includePaths' => [__DIR__.'/../../../'],
    'excludePaths' => [__DIR__.'../../../vendor'],
    'cacheDir'  => '/tmp/datamanager',
]);

我不知道我是否真的需要排除供应商目录,但我看到了这样的建议。如果那是强制性的,它应该写在我没有看到的自述文件中。

在 includePaths 中应该可以看到我所有的项目文件。

我在SummaryCest.php

中有功能
public function correctSummaryCounts(AcceptanceTester $I)
{
    \AspectMock\Test::double(SummaryController::class, ['get' => null]);
}

当我运行测试

php codecept.phar run test/codeception/acceptance/SummaryCest.php 

我收到消息

==== Redirecting to Composer-installed version in vendor/codeception ====
Codeception PHP Testing Framework v2.3.5
Powered by PHPUnit 6.2.4 by Sebastian Bergmann and contributors.
PHP Fatal error:  Uncaught Error: Class 'Go\ParserReflection\ReflectionFile' not found in /var/www/warehouseDataManager/vendor/codeception/aspect-mock/src/AspectMock/Intercept/BeforeMockTransformer.php:16
Stack trace:
#0 /var/www/warehouseDataManager/vendor/goaop/framework/src/Instrument/Transformer/CachingTransformer.php(124): AspectMock\Intercept\BeforeMockTransformer->transform(Object(Go\Instrument\Transformer\StreamMetaData))
#1 /var/www/warehouseDataManager/vendor/goaop/framework/src/Instrument/Transformer/CachingTransformer.php(83): Go\Instrument\Transformer\CachingTransformer->processTransformers(Object(Go\Instrument\Transformer\StreamMetaData))
#2 /var/www/warehouseDataManager/vendor/goaop/framework/src/Instrument/ClassLoading/SourceTransformingLoader.php(134): Go\Instrument\Transformer\CachingTransformer->transform(Object(Go\Instrument\Transformer\StreamMetaData))
#3 /var/www/warehouseDataManager/vendor/goaop/framework/src/Instrument/ClassLoading/SourceTransformingLoader.php(101): Go\Instrument\ClassLoading\SourceTran in /var/www/warehouseDataManager/vendor/codeception/aspect-mock/src/AspectMock/Intercept/BeforeMockTransformer.php on line 16

你能解释一下如何配置吗?

我在readme里也看到了

$userModel = test::double('UserModel', ['tableName' => 'my_users']);

但是连测试都没有找到。所以我尝试使用至少找到的\AspectMock\Test。

请注意,错误甚至在 运行我的测试函数之前就已抛出。当我在 class 声明

之前尝试 运行ning
$kernel->init();

它已经给出了同样的错误。

_bootstrap.php 文件不再由 Codeception 自动创建。 要启用它们,您必须添加

settings:
    bootstrap: _bootstrap.php

到codeception.yml文件 并在测试目录和每个套件中手动创建 _bootstrap.php 个文件。

http://codeception.com/docs/reference/Configuration

ReflectionFile 问题看起来像自动加载问题。