単体テストと PHPUnit は初めてです。
ConfigurationInterface
インターフェイスを実装する、完全に制御できるモックが必要です。テスト対象はReportEventParamConverter
オブジェクトであり、テストはオブジェクトとインターフェースの間の相互作用をチェックする必要があります。
ReportEventParamConverter
オブジェクト (ここでは簡略化):
class ReportEventParamConverter implements ParamConverterInterface
{
/**
* @param Request $request
* @param ConfigurationInterface $configuration
*/
function apply(Request $request, ConfigurationInterface $configuration)
{
$request->attributes->set($configuration->getName(), $reportEvent);
}
/**
* @param ConfigurationInterface $configuration
* @return bool
*/
function supports(ConfigurationInterface $configuration)
{
return 'My\Namespaced\Class' === $configuration->getClass();
}
}
そして、これは私がインターフェイスをモックしようとしている方法です:
$cls = 'Sensio\Bundle\FrameworkExtraBundle\Configuration\ConfigurationInterface';
$mock = $this->getMock($mockCls);
と の 2 つのメソッドの戻り値をシミュレートする必要がありgetClass()
ますgetName()
。例えば:
$mock->expects($this->any())
->method('getClass')
->will($this->returnValue('Some\Other\Class'))
;
新しいReportEventParamConverter
テストsupports()
メソッドを作成すると、次の PHPUnit エラーが発生します。
致命的なエラー: 未定義のメソッド Mock_ConfigurationInterface_21e9dccf::getClass() を呼び出します。
$converter = new ReportEventParamConverter();
$this->assertFalse($converter->supports($mock));