首页 > 解决方案 > phpunit : 测试 api 并在同一个控制器中模拟一些方法,但模拟的方法不起作用

问题描述

控制器代码

class testController extends \Illuminate\Routing\Controller
{
    public function test1() {
        $a = $this->test2();
        ...
    }

    protected function test2() {
        return '123';
    }
}

单元测试代码

class Test extends TestCase
{
    public function unittest()
    {
        $mockController = \Mockery::mock('App\Http\Controllers\testController')->makePartial()->shouldAllowMockingProtectedMethods();
        $mockController ->shouldReceive('test2')->andReturn('456');

        $response = $this->json('GET', action('testController@test1'));

        $response->assertStatus(200);
    }
}

什么时候进行单元测试,test2 方法总是返回 123,而不是 456 有什么帮助吗?谢谢。

标签: laravelphpunit

解决方案


目前尚不清楚$this->json()内部做什么(它不是普通 PHPUnit 的一部分),但无论如何,问题可能是您没有在 $mockController任何地方注入,因此单元测试请求原始控制器。


推荐阅读