使用 Laravel 和 Mockery
Posted
技术标签:
【中文标题】使用 Laravel 和 Mockery【英文标题】:Using Laravel and Mockery 【发布时间】:2014-12-24 18:47:49 【问题描述】:我只是尝试进入这个: 我有一个使用 B 类服务的 A 类。 为了隔离这个 A 类并对其进行测试,我想使用 Mockery 和存根 B 类。
我这样做了
public function testMock()
$driver = Mockery::mock('Driver');
App::instance('Driver',$driver);
$driver->shouldReceive('get')->once()->andReturn('Did the job');
$request = new BSRequest($driver);
$this->assertEquals($request->get(),'Did the job');
但我在运行测试后总是收到此消息 ErrorException:传递给 BSrequest::__construct() 的参数 1 必须是 Driver 的实例,Mockery_0_Library_Driver 的实例,在 /var/www/laravel/app/tests/ExampleTest.php 第 56 行调用并定义
而我的 BSrequest 就是这样:
class BSrequest
private $driver;
public function __construct(Driver $driver)
$this->driver = $driver;
function get()
return $this->driver->get();
你能告诉我如何做到这一点吗? 谢谢
【问题讨论】:
“Driver”类真的存在吗? 【参考方案1】:我相信您遇到了命名空间问题或者您遇到了自动加载问题。
在您的测试文件中,确保已自动加载 Driver 类。你可以这样做:
public function testDriverClassIsAvailable()
$driver = new Driver();
$this->assertEquals(get_class($driver), 'Driver');
如果这可行,那么您将知道您的Driver
类已自动加载且可用,并且BSRequest
类存在问题,因为它没有可用的Driver
类。如果您使用命名空间,请确保没有拼写错误。
模拟的Driver
实例应该满足BSRequest->__construct()
要求的类型提示,因此您绝对应该包含类型提示。
【讨论】:
【参考方案2】:事实上,写作时每件事都很好
public function __construct($driver)
$this->driver = $driver;
这意味着删除 $driver 上的 Type 控件。 但我确信我们可以通过保留 Driver $driver 来实现所有这些目标
很遗憾,我不知道怎么做
【讨论】:
以上是关于使用 Laravel 和 Mockery的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.2 - 使用 composer 和 git bash 安装 laravel 时出错
使用 Laravel Livewire 和 Laravel Fortify 进行登录
在没有 Laravel 的情况下使用 Laravel 数据库迁移和种子 [关闭]
如何使用 proengsoft/laravel-jsvalidation 和 Laravel 5 验证数组输入