2013-09-24 16 views
23

Mam interfejs, który chciałbym udawać. Wiem, że mogę kpić z implementacji tego interfejsu, ale czy istnieje sposób, aby po prostu kpić z interfejsu?Czy mogę kpić z implementacji interfejsu za pomocą PHPUnit?

<?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); 
    } 
} 

Co mam tutaj jest:

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 

ciekawe, PHPUnit, mocked interfaces, and instanceof sugerowałaby to może działać.

+0

Masz misread że drugie pytanie, to jest za pomocą '-> getMock()' nie '-> getMockBuilder()', jak to zrobić - i to jak ty również znalazłeś odpowiedź na twój problem. Jednak IIRC również istnieje duplikat twojego pytania, ale nie mogę go teraz znaleźć. – hakre

+0

Interesujące. Nie mogłem znaleźć tego w moich poszukiwaniach. Dziękuję za edycję. –

+0

możesz również zaakceptować poniższą odpowiedź, aby odpowiedzieć na Twoje pytanie. – hakre

Odpowiedz

33

Zamiast

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

użytku

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

lub

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

Totally działa!

+8

Musiałem $ mockBuilder-> setMethods (['all', 'my', 'interface', 'methods']), aby uruchomić go. Ale tak, działa idealnie. Dzięki za pomoc. – Steve

7

następujące prace dla mnie:

$myMockObj = $this->createMock(MyInterface::class); 
Powiązane problemy