Вы уже упоминали сеттер и фабричный подход.Ниже я попытаюсь объяснить еще один - остерегайтесь, однако, что у меня нулевой опыт работы с PHP, и, таким образом, он может нуждаться в корректировке.Более того, я не говорю, что этот подход лучше, чем использование фабрики - это просто еще одна альтернатива, которая может быть полезна в зависимости от ваших конкретных обстоятельств.
В вашем классе не обращайтесь к historyCards
напрямую, ноиспользуя метод получения внутренне.При тестировании вашего класса вы можете создать производный класс, который переопределяет метод получения, чтобы он возвращал не оригинал historyCards
, а макет:
class TrelloCycleTime
{
private $historyCards;
public function __construct()
{
$this->historyCards = [];
}
protected function getHistoryCards()
{
return $this->historyCards;
}
public function soSomethingWithHistoryCards()
{
... do some computations, but don't ever use $this-> historyCards,
... but always fetch it via $this->getHistoryCards();
}
}
В своем тесте вы можете использовать следующий производный класс для тестированияметоды класса TrelloCycleTime
.
class TrelloCycleTimeWithMockedHistoryCards extends TrelloCycleTime
{
public mockedHistoryCards; // public so you can access it easily from your tests.
public function __construct($mockedHistoryCards)
{
$this->historyCards = $mockedHistoryCards;
}
protected function getHistoryCards()
{
return $this->mockedHistoryCards;
}
}