Имея класс вроде следующего:
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 Я что-то не так делаю?
Вам нужно вызвать метод в вашем классе, используя 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
Других решений пока нет …