@mcakaneo
Я люблю пиццу

Как тестировать метод класса, в котором вызывается void метод свойства этого класса и изменяет состояние этого класса?

Есть классы:
class Aaa {
    private $bbb;
    public $some_property = 10;

    function __construct(B $bbb){
        $this->bbb = $bbb;
    }

    public function some_func(){
        // ...
        $bbb->change_aaa_property($this);
        // ...
    }
}

class Bbb {
    function change_aaa_property(A $aaa){
        $aaa->some_property += 10;
    }
}


В методе some_func() класса Aaa у объекта $bbb, который является свойством класса Aaa, вызывается метод change_aaa_property(). В этом change_aaa_property() изменяется свойство $some_property класса Aaa.

Я знаю, что зависимости нужно заменять mock объектами, то есть $bbb нужно заменить на mock объект. Но тогда как метод фиктивного объекта $bbb — change_aaa_property() сможет изменить $some_property объекта $aaa??? Ведь у mock объектов, вроде как, нет реализации методов. И после тестирования some_func() значение свойства $some_property остаётся таким же (10).

Короче говоря, я хочу понять как при тестировании some_func() сделать так, чтобы метод change_aaa_property() фиктивного объекта $bbb, изменил свойство $some_property класса Aaa.

Или возможно есть другой способ чтобы протестировать some_func()?

Я долго искал но не нашёл ничего внятного, может неправильно искал. Да, возможно, это плохой дизайн и так делать не стоит, но всё-таки реально ли это сделать?
  • Вопрос задан
  • 387 просмотров
Решения вопроса 1
xEpozZ
@xEpozZ
Веб-разработчик
$bbb = new Bbb();
$aaa = new Aaa($bbb);
$aaa->some_func();
$this->assertEquals(20, $aaa->some_property);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы