PHPUnit: как смоделировать один конкретный метод в классе, который вызывается из немодированного

Имея класс вроде следующего:

class MyClass{

public static function create($data){$dataModified= $self::doCurlRequest($data);

//doing something else with data

return $dataModifiedAlot;
}

public static function doCurlRequest($someData){
//doing request here
}

}

можно ли издеваться только над doCurlRequest ($ someData)? Я попробовал это:

class MyClassTest extends PHPUnit_Framework_TestCase{

public function testCreate(){

$mock = $this->getMockBuilder('MyClass')->setMethods(array('doCurlRequest'))->getMock();

$mock::staticExpects($this->any())
->method('doCurlRequest')
->with($someDataNeededForRequest)
->will($this->returnValue("some JSON rensponse"));

$response = $mock::create($data);

}

}

и проблема в том, что метод doCurlRequest ($ someData) возвращает действительное значение вместо ожидаемого: / A Я что-то не так делаю?

0

Решение

Вам нужно вызвать метод в вашем классе, используя static::doCurlRequest(), staticExpects использования поздняя статическая привязка создать макет. Из-за этого метод должен вызываться через static скорее, чем self или же $this-> который будет вызывать фактический метод.

Ваш класс должен выглядеть так:

class MyClass{

public static function create($data){$dataModified= static::doCurlRequest($data);

//doing something else with data

return $dataModifiedAlot;
}

public static function doCurlRequest($someData){
//doing request here
}

}

FYI: staticExpects был удален в PHPUnit 4.0

https://github.com/sebastianbergmann/phpunit/wiki/Release-Announcement-for-PHPUnit-4.0.0#backwards-compatibility-issues

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]