2015-08-28 6 views
0

Im совершенно новый для насмешек и тестирования phpunit.Mockery shouldReceive с типом -> получение полученного объекта

Я создал тест, чтобы проверить, было ли что-то записано в базу данных. Я использую доктрину, и я создал издевательский объект моего doctrine_connection и моего doctrine_manager.

Все работает так прекрасно, но я хочу получить заданный параметр, чтобы проверить его с помощью assertEqual.

В данный момент я делаю следующее:

require_once "AbstractEFlyerPhpUnitTestCase.php"; 
class test2 extends AbstractEFlyerPhpUnitTestCase { 

public function getCodeUnderTest() { 
    return "../php/ajax/presentations/add_presentation.php"; 
} 

public function testingPresentationObject() 
{ 
    // prepare 
    $_REQUEST["caption"] = "Testpräsentation"; 
    $_SESSION["currentUserId"] = 1337; 

    $this->mockedUnitOfWork->shouldReceive('saveGraph')->with(\Mockery::type('EFPresentation')); 
    $this->mockedUnitOfWork->shouldReceive('saveGraph')->with(\Mockery::type('EFSharedPresentation')); 
    $this->mockedDoctrineConnection->shouldReceive('commit'); 

    //run 
    $this->runCodeUnderTest(); 
    global $newPresentation; 
    global $newSharedPresentation; 
    // verify 
    $this -> assertEquals($newPresentation->caption,$_REQUEST["caption"]); 
    $this -> assertEquals($newSharedPresentation->userId,$_SESSION["currentUserId"]); 
} 
} 

saveGraph является получение EFPresentation объекта. Я хочу объект.

Я хочу assertEqual заголовок EFPresentation->, но из заданного объекта, данного параметру. Сейчас я использую заголовок EFPresentation->, созданный в add_presentation.

ответ

1

Вы можете использовать \ Mockery :: on (замыкание), чтобы проверить аргументы. Этот метод получает функцию, которая будет вызвана передачей фактического аргумента. Внутри вы можете проверить все, что вам нужно, и вы должны вернуть true, если проверка прошла успешно.

$this 
    ->mockedUnitOfWork 
    ->shouldReceive('saveGraph') 
    ->with(
     \Mockery::on(function($newPresentation) { 
      // here you can check what you need... 
      return $newPresentation->caption === $_REQUEST["caption"]; 
     }) 
) 
; 

Одно предостережение в том, что, когда тест не проходит, вы не будете получать подробную информацию о том, почему, если не поставить некоторые отголоски или использовать отладчик. Издевательства сообщают, что закрытие вернулось неверно.

Редактировать: отредактировал отсутствующий кронштейн

+0

Спасибо. Это сработало :) – kovogel

Смежные вопросы