还在学习如何测试php
我现在有了一个工作接口(我认为)-其中一个函数的目的是创建一系列记录,我现在想测试的是。我承认我对考试知之甚少,所以我的问题比知识更多。
所以
我的界面目前看起来如下:
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;
}
return $counter;
}
我在测试中的尝试如下:
public function testCreateCreatesTickets(TicketCreatorInterface $ticketCreator) {
//arrange
$book = Mockery::mock('Book');
//act
$response = $ticketCreator->createTicket(array('start'=>1000, 'end'=>1001), $book);
// Assert...
$this->assertEquals(true, $response);
}
我首先尝试了一下,没有输入接口,就像没有没有对象的错误一样。我尝试在接口上创建一个实例,但您不能这样做,只能在函数中输入提示
我在运行测试时遇到的错误是:
Argument 1 passed to TicketCreatorTest::testCreateCreatesTickets() must implement interface TicketCreatorInterface, none given
创建接口对我来说是一种新的方法,所以还不能完全理解它。
那么,我如何测试这个函数,并按照预期创建一个票证呢?
我在内存数据库中用sqlite测试了模型
发布于 2013-11-20 12:59:51
您需要在测试中创建一个TicketCreator实例来调用该方法。将测试更改为:
public function testCreateCreatesTickets() {
//arrange
$book = Mockery::mock('Book');
$ticketAudit = Mockery::mock('TicketAudit');
$ticketCreator = new TicketCreator($ticketAudit);
//act
$response = $ticketCreator->createTicket(array('start'=>1000, 'end'=>1001), $book);
// Assert...
$this->assertEquals(true, $response);
}
由于在构造函数中需要一个TicketAudit,所以还需要创建该对象的模拟,并将其传递给构造函数。
PHPUnit为测试用例提供参数的唯一时间是有数据提供程序或测试依赖于另一个测试时。
请记住,您没有创建接口的实例。如果我想确保您的对象实现了一个接口,我将创建一个测试,检查该对象是否是使用assertInstanceOf
的接口的一个实例。
https://stackoverflow.com/questions/20106720
复制