Итак, я хочу проверить двойную функцию doEverything так:
class MyClass {
protected secondClass;
public function __construct(
SecondClass $secondClass;
) {
$this->secondClass = $secondClass;
}
public function doEverything() : void {
$this->secondClass->doSomethingSecondClass();
$this->doSomething();
}
public function doSomething(): void {
// do something, return nothing
}
}
И соответствующий тест, который я пытаюсь использовать, выглядит следующим образом:
class MyClassTest extends TestCase
{
protected $secondClass;
protected $myClass;
public function setUp() : void
{
$this->secondClass = $this->getMockBuilder(SecondClass::class)
->disableOriginalConstructor()
->setMethods(
[
'doSomethingSecondClass'
]
)
->getMock();
$this->myClass = $this->getMockBuilder(MyClass::class)
->setConstructorArgs([$this->secondClass])
->setMethods(
[
'doEverything',
'doSomething'
]
)
->getMock();
}
public function testDoEverything(): void
{
$this->secondClass->expects($this->once())->method('doSomethingSecondClass');
$this->myClass->expects($this->once())->method('doSomething');
$this->myClass->doEverything();
}
}
Это выше возвращаемое значение мне, что doSomethingSecondClass никогда не вызывается в методе doEverything из MyClass. Думаю, я могу использовать $ this-> myClass-> Ожидает без проблем.
И следующий тестовый код:
class MyClassTest extends TestCase
{
protected $secondClass;
protected $myClass;
public function setUp() : void
{
$this->secondClass = $this->getMockBuilder(SecondClass::class)
->disableOriginalConstructor()
->setMethods(
[
'doSomethingSecondClass'
]
)
->getMock();
$this->saveMultiple = new SaveMultiple(
$this->resourceConnection
);
}
public function testDoEverything(): void
{
$this->secondClass->expects($this->once())->method('doSomethingSecondClass');
$this->myClass->expects($this->once())->method('doSomething');
$this->myClass->doEverything();
}
}
Приведенный выше код говорит мне, что myClass не может использоваться с функцией ожидает из phpUnit, но doSomethingSecondClass вызывается, как и ожидалось.
Итак, по вашему мнению, как мне приступить к тестированию этого метода?
Спасибо!