仍然在學習如何測試PHPPHPUnit的測試功能
我現在有一個工作界面(我認爲) - 的功能之一是爲了創造出一系列的,我現在想測試是做記錄。我承認我對測試知之甚少,所以比知識有更多的問題。
所以
我的界面目前看起來是這樣的:
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);
}
我首先嚐試沒有打印接口,因爲沒有收到沒有任何對象的錯誤。我試圖創建界面上的一個實例,但你不能這樣做,因此訴諸於功能
我得到的錯誤typehinting當我運行測試:
Argument 1 passed to TicketCreatorTest::testCreateCreatesTickets() must implement interface TicketCreatorInterface, none given
創建界面是一種新的方法對我來說,所以還不完全瞭解它。
那麼我該如何測試這個函數是否按預期創建了一張票?
我在內存數據庫
謝謝。這工作。我現在發現的問題是,因爲ticketAudit被嘲笑了一些需要該對象的功能,並且它的所有屬性都不再起作用。現在我的錯誤是'調用一個非對象的成員函數associate()有沒有辦法解決這個問題? – Ray
我對Mockery不熟悉,但您需要在模擬中設置這些方法的行爲,以便僅測試TicketCreator類而不需要依賴ticketAudit功能。 – Schleis
這個錯誤是因爲'book()'方法返回null。你需要設置你的嘲諷當這個值被調用時返回一些東西。儘管你這樣做的事實是一種代碼異味,你應該考慮改變你的代碼,以便你不需要讓模擬對象返回模擬對象。 – Schleis