首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Laravel和Mockery

使用Laravel和Mockery
EN

Stack Overflow用户
提问于 2014-10-29 14:31:11
回答 2查看 71关注 0票数 0

我只是尝试这样做:我有一个A类,它使用B类的服务。为了隔离这个A类并测试它,我想使用Mockery和stub类B。

为了做到这一点我做到了

代码语言:javascript
复制
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');

}

但在运行测试测试后,我总是得到这样的消息:传递给BSrequest::__construct()的参数1必须是驱动程序的实例,给定的Mockery__Library_Driver实例,在/var/www/laravel/app/ErrorException/ExampleTest.php的第56行调用并定义

我的BSrequest是这样的:

代码语言:javascript
复制
    class BSrequest {

private $driver;

public function __construct(Driver $driver) {
    $this->driver = $driver;
}

function get() {
    return $this->driver->get();
}}

你能告诉我如何做到这一点吗?谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-04-16 02:34:01

我认为你遇到了命名空间的问题,或者你遇到了自动加载的问题。

在您的测试文件中,确保驱动程序类已自动加载。你可以这样做:

代码语言:javascript
复制
public function testDriverClassIsAvailable()
{

    $driver = new Driver();

    $this->assertEquals(get_class($driver), 'Driver');
}

如果这样可以工作,那么您将知道您的Driver类是自动加载的并且可用,并且BSRequest类存在问题,因为它没有可用的Driver类。如果您使用的是名称空间,请确保没有输入错误。

模拟的Driver实例应该满足BSRequest->__construct()所需的类型提示,因此一定要包含类型提示。

票数 1
EN

Stack Overflow用户

发布于 2014-10-30 15:33:23

事实上,在写东西的时候,每件事都很好用。

代码语言:javascript
复制
public function __construct($driver) {
    $this->driver = $driver;
}

这意味着移除$driver上的类型控件。但我确信我们可以在保持Driver $driver的基础上实现所有这些功能

不幸的是我不知道该怎么做

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26624012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档