Итак, у меня есть следующий фрагмент кода, который используется во всей моей системе. В настоящее время мы пишем модульные тесты ретроспективно (лучше поздно, чем никогда не было моим аргументом), но я не понимаю, как это будет тестироваться?
public function validate($value, Constraint $constraint)
{
$searchEntity = EmailAlertToSearchAdapter::adapt($value);
$queryBuilder = SearcherFactory::getSearchDirector($searchEntity->getKeywords());
$adapter = new SearchEntityToQueryAdapter($queryBuilder, $searchEntity);
$query = $adapter->setupBuilder()->build();
$totalCount = $this->advertType->count($query);
if ($totalCount >= self::MAXIMUM_MATCHING_ADS) {
$this->context->addViolation(
$constraint->message
);
}
}
Концептуально это должно быть применимо к любому языку, но я использую PHP. Код просто создает объект запроса ElasticSearch на основе Search
объекта, который, в свою очередь, создается из EmailAlert
объекта. Это Search
и EmailAlert
есть просто ПОПО.
Моя проблема заключается в том , что я не понимаю , как я могу издеваться вне SearcherFactory
(который использует статический метод), ни SearchEntityToQueryAdapter
, что нужны результаты SearcherFactory::getSearchDirector
и на Search
экземпляр. Как мне внедрить что-то, что создается из результатов в методе? Может быть, есть какой-то шаблон дизайна, о котором я не знаю?
Спасибо за любую помощь!
::
это для статических методов.
::
вызывает статический метод для класса.
$this->context->addViolation
вызова, внутриif
.