2017-02-06 26 views
1

У меня есть этот шпион в тесте:
$subject->expects($this->once())->method('send_json_success')->with($expected);Строго шпионить метод аргумент в PHPUnit

$expected массив и один из элементов этого массива должен быть установлен в 0.

Вместо этого в настоящее время устанавливается пустая строка, которая является источником проблемы, которую я исправляю. Я хочу убедиться, что тест завершился неудачно, когда элемент установлен на пустую строку, но я не могу найти, как сказать PHPUnit, чтобы строго проверить массив точно так же, как $expected.

Я не могу использовать $this->same(), потому что метод ничего не возвращает: мне нужно проверить, что метод вызывается с правильными аргументами.

+1

Я не знаю, если это возможно с PHPUnit, но можно с Phake (тестирования PHP рамочным библиотеки) с помощью метода Параметр Matchers. проверьте его в документе [здесь] (http://phake.readthedocs.io/en/2.1/method-parameter-matchers.html?highlight=capture#parameter-capturing). Дайте мне знать – Matteo

+0

Это звучит интересно @Matteo. Я посмотрю, смогу ли я получить какой-то ответ, который не требует добавления nth framework в мою библиотеку тестов :) В противном случае. Я попробую Фэйка. –

+0

Конечно, @Andrea, можете ли вы опубликовать неудачный тест PHPUnit вашей проблемы, поэтому попроще решить проблему? – Matteo

ответ

2

Как поясняется в API documentation of the with() method, вы можете использовать объект PHPUnit_Framework_Constraint.

A PHPUnit_Framework_Constraint_IsIdentical объект используется для implement the TestCase::assetSame() method.

Таким образом, это должно быть:

<?php 

use PHPUnit_Framework_Constraint_IsIdentical; 

// Test case class... 

$subject->expects($this->once()) 
     ->method('send_json_success') 
     ->with(new PHPUnit_Framework_Constraint_IsIdentical($expected)); 
+1

Именно это мне и понадобилось @ damien-flament. Я искал в документации API, но я явно пропустил то, что мне нужно. Благодаря! –

+1

Ссылки на документацию API, предоставленную мной, указывают на документацию API, которую я сгенерировал. Официальной публикации PHPUnit API нет. –

+0

Возможно, это объясняет, почему вы его не нашли. –

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

  • Нет связанных вопросов^_^