经过测试的界面:
interface Foo
{
public function f(Type $x);
}
是否有一种标准的方法(使用PHPUnit API)来编写一个测试,该测试声明:
f
期望参数类型 Type
?
目前,我正在使用Reflection
进行类型检测并进行进一步的验证:
TestCase:
public function testFooInterfaceFExpectsType()
{
$this->assertInstanceOf(
Type::class,
$this->getParameterTypeForMethod('f', 0)
);
}
private function getParameterTypeForMethod($methodName, $parameterNumber)
{
return $this->createMock((string) (new \ReflectionClass(FooInterface::class))
->getMethod($methodName)
->getParameters()[$parameterNumber]
->getType());
}
这种方法适用于特定情况,但仅限于类类型,因此不会像自定义断言那样有用。