Я начал использовать PHPUnit для тестирования и макетов методов в php. Если методы находятся в одном классе, проблем не возникает.
Но я еще не понял, как издеваться над методом, который есть в другом классе.
class classA {
public function funcA() {
$classB = new classB();
$value = $classB->getValue();
return $value;
}
}
class classB {
public function getValue() {
return "this is my value";
}
}
Если бы getValue был в классе A, я мог бы сделать следующее:
class testClassA {
function testFuncA() {
$mb = $this
->getMockBuilder(classA::class)
->setMethods(array('getValue'))
->getMock();
$mb
->method('getValue')
->will($this->returnValue('my new value');
$value = $mb->funcA();
$this->assertEquals('my new value', $value);
}
}
Но как мне это сделать в том случае, как у нас выше?
Edit:
Джон Стирлинг попросил создать экземпляр класса B в конструкторе вместо проверенного метода
Итак, давайте отредактируем класс A
class classA {
$private classB;
public function __construct(){
$this->classB = new classB();
}
public function funcA() {
$value = $this->classB->getValue();
return $value
}
}
Так как же это возможно?