2013-11-19 2 views
1

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

У меня есть рабочий рассчитывает следующий образом:

$context->expects($this->once()) 
    ->method('msg') 
    ->with(
     $this->equalTo($someMessageArguments[0]), 
     $this->equalTo($someMessageArguments[1]), 
     $this->equalTo($someMessageArguments[2]) 
    ); 

Это явно не хорошо, как это предполагает длину переменного списка 3. Я хочу использовать поставщик данных и тест с различными длинами, а также , и в этом случае этот код не будет его обрезать.

Есть ли разумный способ сделать это с помощью PHPUnit API? Я взломал эту игру, которая также работает, хотя, кажется, довольно зло, а также:

$invocationMocker = $context->expects($this->once()) 
    ->method('msg'); 

$invocationMocker->getMatcher()->parametersMatcher 
    = new PHPUnit_Framework_MockObject_Matcher_Parameters($someMessageArguments); 

В случае нет никакого способа сделать это красиво с помощью PHPUnit API, есть подход, который лучше, чем два, перечисленных здесь ?

ответ

2

Я не нашел способ сделать это с помощью PHPUnit mocks.

Использование издевательство, вы можете что АРХИВ:

$mock->shouldReceive('msg') 
    ->once() 
    ->withArgs($someMessageArguments); 

Лично я обычно предпочитаю издевательство над PHPUnit издевается.

https://github.com/padraic/mockery

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