无法模拟 laravel 6 中的任何自定义 class 方法

Unable to mock any custom class method in laravel 6

我有一个基本 Class 助手。

namespace App\Helpers;

class CommonUtility {

    public static function foo() {
        return 'foo';
    }
}

并且在User.php

中使用
<?php
class User extends Authenticatable
    public function test() {
        return CommonUtility::foo();
    }
}

现在我想编写一个模拟 CommonUtility 的测试 class。谁能知道我是 laravel 单元测试的新手。

尝试了一些解决方案,例如

$mock = Mockery::mock(CommonUtility::class, function ($mock) {
            $mock->shouldReceive('foo')->andReturn('foobar');
        })->makePartial();

dd($mock->foo());

它给了我模拟结果,但我从

开始尝试
$user = new \App\User();
dd($user->test());

它正在调用实际函数而不是模拟函数。

您可以使用 Aliasing Mockery features for Mocking Public Static Methods

例如:

        $mock = \Mockery::mock('alias:App\Helpers\CommonUtility');
        $mock->shouldReceive('foo')
            ->andReturn('foobar');
        
        $user = new User();
        $this->assertEquals("foobar", $user->test());

测试如期通过