I was wondering if how I can verify if a 'class' has a Function. assertClassHasAttribute does not work, it's normal since a Function is not an Attribute.
问题:
回答1:
When there's not an assertion method provided by PHPUnit I either create it or use one of the lower-level assertions with a verbose message:
$this->assertTrue(
method_exists($myClass, 'myFunction'),
'Class does not have method myFunction'
);
assertTrue()
is as basic as you can get. It allows a great deal of flexibility because you can use any built-in php function that returns a bool value for your test. Consequently, when the test fails the error/failure message isn't helpful at all. Something like Failed asserting that <FALSE> is TRUE
. That's why it's important to pass the second param to assertTrue()
detailing why the test failed.
回答2:
Unit and Integration tests are for testing behaviors not for restating what the class definition is.
So PHPUnit doesn't provide such assertion. PHPUnit can either assert that a class has a name X , that a function returns value somthing , but you can do what you want using :
/**
* 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));
}