Мне было интересно, можно ли проверить, имеет ли «класс» функцию. assertClassHasAttribute не работает, это нормально, поскольку функция не является атрибутом.
Если метод PHPUnit не существует, я либо создаю его, либо использую одно из утверждений нижнего уровня с подробным сообщением:
$this->assertTrue( method_exists($myClass, 'myFunction'), 'Class does not have method myFunction' );
assertTrue()
является основным, как вы можете получить. Это обеспечивает большую гибкость, поскольку вы можете использовать любую встроенную функцию php, которая возвращает значение bool для вашего теста. Следовательно, когда тест не выполняется, сообщение об ошибке / сбое вообще не помогает. Что-то вроде Failed asserting that <FALSE> is TRUE
. Вот почему важно передать второй параметр assertTrue()
детализируя, почему тест не удался.
Тесты Unit и Integration предназначены для тестирования поведения, а не для повторения определения класса.
Поэтому PHPUnit не дает такого утверждения. PHPUnit может либо утверждать, что класс имеет имя X, что функция возвращает значение somthing, но вы можете делать то, что хотите:
/** * 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)); }