使用 Mockery 进行单元测试返回 false
Posted
技术标签:
【中文标题】使用 Mockery 进行单元测试返回 false【英文标题】:Unit Testing with Mockery return false 【发布时间】:2019-08-02 23:21:57 【问题描述】:我已经写了这个测试:
public function testSetVisitorLog()
$visitorRepositoryMock = Mockery::mock('App\Repositories\VisitorStatisticRepository');
$this->app->instance('App\Repositories\VisitorStatisticRepository',$visitorRepositoryMock);
$visitorRepositoryMock->shouldReceive('setLog')->once();
$visitorAction = new VisitorStatisticAction($visitorRepositoryMock);
$this->assertEquals(true,$visitorAction->setLog('fars'));
我在 VisitorStatisticAction 类中调用 setLog 并输入字符串
在 VisitorStatisticAction 我有这个:
public function setLog($organizationSlug)
dd($this->repository->setLog($organizationSlug));
if (!$this->repository->setLog($organizationSlug))
return false;
return true;
我不知道为什么dd($this->repository->setLog($organizationSlug));
是返回null
setLog in repository 是这样的:
public function setLog($organizationSlug)
$visitor = new VisitorStatistic();
$visitor->organization_slug = $organizationSlug;
$visitor->ip = request()->ip();
$visitor->url = url()->current();
$visitor->save();
return $visitor;
【问题讨论】:
你使用的是什么版本的 Laravel? laravel 5.7 版 【参考方案1】:我找到了答案:)
添加andReturn()
会返回正确答案
$visitorRepositoryMock->shouldReceive('setLog')->once()->andReturn(new VisitorStatistic());
【讨论】:
以上是关于使用 Mockery 进行单元测试返回 false的主要内容,如果未能解决你的问题,请参考以下文章
PHP 单元测试 - 使用 Mockery 模拟静态自动加载类
未定义的属性:Laravel 单元测试中的 Mockery_3_App_Repositories_ArticleRepositoryInterface::$id