Частичная насмешка с разработчиком 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, и ни один из методов в классе не запускается, как если бы этот метод был издевательством над самим собой. Не уверен, то ли я здесь веду себя глупо, то ли я просто чего-то не понимаю в ЭкомДев. Помощь была бы очень признательна.

Author: Kasia Gogolek, 2013-09-12

2 answers

Оказывается, что если вы хотите использовать частичное издевательство, вы можете отказаться от getHelperMock и просто использовать собственный getmock() от PHPUnit с полным именем класса в качестве атрибута. Таким образом, будут высмеиваться только указанные методы, а другие останутся для тестирования.

 5
Author: Kasia Gogolek, 2013-09-13 10:34:17

Вы пробовали следующий код?

$this->replaceByMock('helper', 'postcodelookup/data', $helper);

Но это заменит помощника, если другой код, например модель, попытается использовать помощника.

Я попытался смоделировать вашу проблему, но в моей настройке вызывается исходный метод.

 1
Author: claudiu.f.marginean, 2016-12-21 14:13:15