未找到Laravel测试模拟对象方法


Laravel testing mocked object method not found

好吧-我的测试之旅(与laravel)仍在继续。。。

我已经创建了一个实例和一个"存储库",现在我正在尝试对其进行测试。然而,在这样做的时候,我得到了一个错误,即找不到类中的方法。对我来说,这意味着至少找到了这个类。

我在config/app.php中添加了以下内容:

//custom service providers
    'GolfmanagerServiceProvider'

我的服务提供商是:

class GolfmanagerServiceProvider extends ServiceProvider {
    public function register()
    {
        $this->app->bind(
            'golfmanager'service'creator'TicketCreatorInterface', 
            'golfmanager'service'creator'TicketCreator'
        ); 
        }
    }

我的界面是:

interface TicketCreatorInterface {
    public function createTicket($input, $book);
}

我的"存储库"(这是正确的术语吗?):

Class TicketCreator  implements TicketCreatorInterface {
protected $ticket;
public function __construct(TicketAudit $ticketAudit)
{
    $this->ticket = $ticketAudit;
}
public function createTicket($input, $book) {
    $counter = $input['start'];
    while($counter <= $input['end']) {
        $this->$ticket->create(array(
            'ticketnumber'=>$counter,
            'status'=>'unused',
            'active'=>1
            ));
        $this->ticket->book()->associate($book);
    $counter = $counter+1;
    }
}
}

TicketAudit是一个雄辩的模型

到目前为止,我的测试是:

public function testCreateTicketBindsTicketAuditFromRepository()
 {
 // Arrange...
 $repository = Mockery::mock('TicketAudit');
 $ticketCreator = Mockery::mock('TicketCreatorInterface');
 $book = Mockery::mock('Book');
 $repository->shouldReceive('create')
    ->with(array(
        'ticketnumber'=>1000,
        'status'=>'unused',
        'active'=>1
        ), $book)
    ->times(2)->andReturn("true");
 $book->shouldReceive('find')->once()->andReturn(1);
 App::instance('TicketCreatorInterface', $repository);
 // Act...
 $response = $ticketCreator->createTicket(array('start'=>1000, 'end'=>1001), $book);
 // Assert...
 //still got to do this bit....
 }

我不确定应用程序实例是否应该在那里——我已经通过服务提供商做到了吗?

我的错误是:

BadMethodCallException: Method TicketCreatorInterface::createTicket() does not exist on this mock object

我对测试很陌生——这种方法(创建界面)一直在从教程和书籍中学习——它还没有点击这里到底应该发生什么,就像我在中学习一样

这次我犯了什么愚蠢的错误??

我已经完成了composer更新、composer安装和composer转储自动加载,但到目前为止没有效果。

您已经嘲笑了您的界面

$ticketCreator = Mockery::mock('TicketCreatorInterface');

你在那个模拟对象上调用了createTicket()

$response = $ticketCreator->createTicket(array('start'=>1000, 'end'=>1001), $book);

但是,您忘记告诉Mockery方法createTicket()将被调用,并且应该被模拟:

$ticketCreator->shouldReceive('createTicket')->once()->andReturn($whatever);