Частичная насмешка с разработчиком Ecom
Я пытаюсь частично издеваться над помощником, который запускает приведенный ниже код
public function formatPostcode($postcode, $country_code) {
if ( $country_code === "AU" ) {
return $this->formatAUPostcode($postcode);
} else {
return $this->formatGBPostcode($postcode);
}
}
Тестовый класс будет содержать следующий код:
public function testFormatPostcodeWithGBParam() {
$postcode = "SW12 9ER";
$helper = $this->getHelperMock('postcodelookup/data', array('formatAUPostcode', 'formatGBPostcode'));
$helper->expects($this->once())
->method('formatGBPostcode')
->with($this->equalTo($postcode))
->will($this->returnValue("fooBar"));
$helper->expects($this->never())
->method('formatAUPostcode');
$this->assertEquals('fooBar', $helper->formatPostcode($postcode, "GB"));
}
Исходя из этого, я ожидал бы, что смогу издеваться над методами formatAUPostcode и formatGBPostcode, но когда я запускаю этот тест, $helper->formatpostcode() возвращает значение null, и ни один из методов в классе не запускается, как если бы этот метод был издевательством над самим собой. Не уверен, то ли я здесь веду себя глупо, то ли я просто чего-то не понимаю в ЭкомДев. Помощь была бы очень признательна.
2 answers
Оказывается, что если вы хотите использовать частичное издевательство, вы можете отказаться от getHelperMock и просто использовать собственный getmock() от PHPUnit с полным именем класса в качестве атрибута. Таким образом, будут высмеиваться только указанные методы, а другие останутся для тестирования.
Вы пробовали следующий код?
$this->replaceByMock('helper', 'postcodelookup/data', $helper);
Но это заменит помощника, если другой код, например модель, попытается использовать помощника.
Я попытался смоделировать вашу проблему, но в моей настройке вызывается исходный метод.