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 Search
obiekcie, który z kolei jest zbudowany z EmailAlert
obiektu. To Search
i EmailAlert
są 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 Search
przypadek. 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->addViolation
połączenia, wewnątrzif
.