Mam więc następujący kod w całym systemie. Obecnie piszemy testy jednostkowe retrospektywnie (lepiej późno niż nigdy nie był mój argument), ale nie rozumiem, jak to byłoby możliwe do przetestowania?
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
);
}
}
Koncepcyjnie powinno to dotyczyć dowolnego języka, ale używam PHP. Kod po prostu tworzy obiekt zapytania ElasticSearch oparty na Searchobiekcie, który z kolei jest zbudowany z EmailAlertobiektu. To Searchi EmailAlertsą tylko POPO.
Moim problemem jest to, że nie widzę, w jaki sposób można wyśmiewać się z SearcherFactory(który wykorzystuje metodę statyczną), ani SearchEntityToQueryAdapter, który potrzebuje wyników SearcherFactory::getSearchDirector i ten Searchprzypadek. Jak wstrzyknąć coś, co powstaje na podstawie wyników w ramach metody? Może jest jakiś wzór, o którym nie wiem?
Dzięki za wszelką pomoc!
::jest to metoda statyczna.
::wywołuje metodę statyczną w klasie.
$this->context->addViolationpołączenia, wewnątrzif.