首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定位器I Yii2未找到Codeception/AspectMock父类

定位器I Yii2未找到Codeception/AspectMock父类
EN

Stack Overflow用户
提问于 2018-11-13 16:11:55
回答 1查看 401关注 0票数 0

我正在尝试在Yii2测试中使用Codeception/AspectMock。我有两个类:

其一:

代码语言:javascript
复制
namespace backend\baseModel;
class BaseModel
{
    public static function getId()
    {
        return 9;
    }
}

第二:

代码语言:javascript
复制
use \backend\baseModel\BaseModel;

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

我正在尝试测试ModelA:

代码语言:javascript
复制
class TestModel extends \Codeception\Test\Unit
{

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

我将执行测试,但出现以下错误:

代码语言:javascript
复制
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

我的配置文件:

代码语言:javascript
复制
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 Parent class not found by locator

错误不再出现,但是getId ()方法返回5而不是7。

EN

回答 1

Stack Overflow用户

发布于 2018-11-13 17:45:05

您有静态方法,并且您在ModelA中覆盖了getId函数,并且在测试中您调用了ModelA类,因此在您的情况下它应该返回5。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53276511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档