Aspect mock不会在代码中重载方法

时间:2017-09-23 09:50:23

标签: php codeception

我有这样的文件:

/src/Api.php

<?php

namespace src;

class Api {
    function apiCall()
    {
        return 'api_result';
    }
}

/tests/_bootstrap.php

<?php

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

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

codeception.yml

paths:
    tests: tests
    output: tests/_output
    data: tests/_data
    support: tests/_support
    envs: tests/_envs
actor_suffix: Tester
extensions:
    enabled:
        - Codeception\Extension\RunFailed

settings:
    bootstrap: _bootstrap.php

composer.json

{
    "require-dev": {
        "codeception/aspect-mock": "*",
        "codeception/codeception": "^2.3"
    },

    "autoload": {
        "psr-4": {
            "": "src/"
        }
    }
}

的index.php

<?php

require_once "vendor/autoload.php";

use src\Api;

$api = new Api();
echo $api->apiCall();
echo 'test';

/tests/acceptance/FirstCest.php

<?php

use AspectMock\Test as test;
use src\Api;

class FirstCest
{
    public function frontpageWorks(AcceptanceTester $I)
    {
        $I->amOnPage('/');

        test::double(Api::class, ['apiCall' => 'mock']);

        $I->see('mocktest');
    }
}

当我在浏览器中加载页面时,我看到字符串'api_resulttest'

现在,当我模拟apiCall函数时,输出应为'mocktest'。

我运行命令

php codecept.phar run --steps -d 

测试失败,我仍然看到输出'api_resulttest'。

为什么呢?我是否正确使用它? https://github.com/Codeception/AspectMock这里没有说明如何在代码测试中使用它。

或者请告诉另一种方式 - 我应该如何在代码中模拟api调用?多数民众赞成我想做的事。

我已经推入了bitbucket,所以你可以测试一下这个例子: https://bitbucket.org/darius_v/codeception_mock/src

2017年10月更新 现在删除了我最新提交中的方面模拟。

1 个答案:

答案 0 :(得分:0)

PhpBrowser通过HTTP向您的网站发出请求,因此测试代码中设置的模拟对应用程序代码没有影响。

如果使用框架模块,模拟工作在单元测试和功能测试中。