2013-09-24 22 views
23

Tôi có một giao diện tôi muốn giả lập. Tôi biết tôi có thể thử một thực hiện của giao diện đó, nhưng có cách nào để chỉ cần giả lập giao diện?Tôi có thể thử thực hiện giao diện với PHPUnit không?

<?php 
require __DIR__ . '/../vendor/autoload.php'; 

use My\Http\IClient as IHttpClient; // The interface 
use My\SomethingElse\Client as SomethingElseClient; 


class SomethingElseClientTest extends PHPUnit_Framework_TestCase { 
    public function testPost() { 
    $url = 'some_url'; 
    $http_client = $this->getMockBuilder('Cpm\Http\IClient'); 
    $something_else = new SomethingElseClient($http_client, $url); 
    } 
} 

Những gì tôi nhận được ở đây là:

1) SomethingElseTest::testPost 
Argument 1 passed to Cpm\SomethingElse\Client::__construct() must be an instance of 
My\Http\IClient, instance of PHPUnit_Framework_MockObject_MockBuilder given, called in 
$PATH_TO_PHP_TEST_FILE on line $NUMBER and defined 

Điều thú vị là, PHPUnit, mocked interfaces, and instanceof sẽ đề nghị này có thể làm việc.

+0

Bạn đã hiểu sai câu hỏi khác, nó được sử dụng '-> getMock()' không '-> getMockBuilder()' như bạn làm - và đó là khi bạn tìm ra câu trả lời cho vấn đề của bạn. Tuy nhiên IIRC một bản sao của câu hỏi của bạn ở đây cũng tồn tại nhưng tôi không thể tìm thấy nó ngay bây giờ. – hakre

+0

Thú vị. Tôi không thể tìm thấy nó trong tìm kiếm của mình. Cảm ơn bạn đã chỉnh sửa. –

+0

bạn cũng có thể chấp nhận câu trả lời của bạn dưới đây để câu hỏi của bạn được đánh dấu là đã trả lời. – hakre

Trả lời

33

Thay vì

http_client = $this->getMockBuilder('Cpm\Http\IClient'); 

sử dụng

http_client = $this->getMock('Cpm\Http\IClient'); 

hoặc

http_client = $this->getMockBuilder('Cpm\Http\IClient')->getMock(); 

Hoàn toàn hiệu quả!

+8

Tôi đã phải $ mockBuilder-> setMethods (['tất cả', 'của tôi', 'giao diện', 'phương pháp']) để làm cho nó hoạt động. Nhưng vâng, hoạt động hoàn hảo. Cảm ơn đã giúp đỡ. – Steve

7

Các công trình sau đây cho tôi:

$myMockObj = $this->createMock(MyInterface::class); 
Các vấn đề liên quan