无法在 laravel 6 中模拟任何自定义类方法
Posted
技术标签:
【中文标题】无法在 laravel 6 中模拟任何自定义类方法【英文标题】:Unable to mock any custom class method in laravel 6 【发布时间】:2021-01-01 19:58:00 【问题描述】:我有一个基本类助手。
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 类编写一个测试。谁能知道我是 laravel 单元测试的新手。
尝试了一些解决方案,例如
$mock = Mockery::mock(CommonUtility::class, function ($mock)
$mock->shouldReceive('foo')->andReturn('foobar');
)->makePartial();
dd($mock->foo());
它给了我模拟结果,但我尝试过
$user = new \App\User();
dd($user->test());
它调用的是实际函数而不是模拟函数。
【问题讨论】:
【参考方案1】:您可以为Mocking Public Static Methods 使用Aliasing Mockery 功能
例如:
$mock = \Mockery::mock('alias:App\Helpers\CommonUtility');
$mock->shouldReceive('foo')
->andReturn('foobar');
$user = new User();
$this->assertEquals("foobar", $user->test());
测试按预期通过
【讨论】:
别名仅在单独运行测试时有效。当运行整个测试套件时,它会因为类已经存在而失败。 别名工作我唯一需要添加的是code
/** * @runInSeparateProcess * @preserveGlobalState disabled */ code
在测试之前
酷!感谢分享@JitenderThakur以上是关于无法在 laravel 6 中模拟任何自定义类方法的主要内容,如果未能解决你的问题,请参考以下文章