Как сделать PHPUnit assertFunction - PullRequest
10 голосов
/ 26 февраля 2012

Мне было интересно, как я могу проверить, есть ли у «класса» функция.assertClassHasAttribute не работает, это нормально, так как функция не является атрибутом.

Ответы [ 2 ]

36 голосов
/ 26 февраля 2012

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

$this->assertTrue(
  method_exists($myClass, 'myFunction'), 
  'Class does not have method myFunction'
);

assertTrue() является настолько простым, насколько вы можете получить.Это обеспечивает большую гибкость, поскольку вы можете использовать любую встроенную функцию php, которая возвращает значение bool для вашего теста.Следовательно, когда тест не пройден, сообщение об ошибке / сбое не помогает вообще.Что-то вроде Failed asserting that <FALSE> is TRUE.Вот почему важно передать второй параметр в assertTrue(), подробно описывая, почему тест не удался.

7 голосов
/ 26 февраля 2012

Модульные и интеграционные тесты предназначены для тестирования поведения, а не для восстановления определения класса.

Так что PHPUnit не предоставляет такого утверждения.PHPUnit может либо утверждать, что класс имеет имя X, что функция возвращает значение, но вы можете делать то, что хотите, используя:

/**
 * Assert that a class has a method 
 *
 * @param string $class name of the class
 * @param string $method name of the searched method
 * @throws ReflectionException if $class don't exist
 * @throws PHPUnit_Framework_ExpectationFailedException if a method isn't found
 */
function assertMethodExist($class, $method) {
    $oReflectionClass = new ReflectionClass($class); 
    assertThat("method exist", true, $oReflectionClass->hasMethod($method));
}
...