Daher wird auf meinem gesamten System der folgende Code verwendet. Wir schreiben derzeit nachträglich Unit-Tests (besser spät als nie zuvor), aber ich sehe nicht ein, wie dies testbar wäre?
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
);
}
}
Konzeptionell sollte dies auf jede Sprache anwendbar sein, aber ich benutze PHP. Der Code baut einfach ein ElasticSearch-Abfrageobjekt auf, das auf einem SearchObjekt basiert , das wiederum aus einem EmailAlertObjekt aufgebaut ist. Dies Searchund EmailAlertdas sind nur POPOs.
Mein Problem ist, dass ich nicht sehe, wie ich das SearcherFactory(das die statische Methode verwendet), noch das SearchEntityToQueryAdapter, das die Ergebnisse von SearcherFactory::getSearchDirector und die SearchInstanz benötigt, verspotten kann . Wie injiziere ich etwas, das aus Ergebnissen innerhalb einer Methode erstellt wird? Vielleicht gibt es ein Designmuster, das mir nicht bekannt ist?
Danke für jede Hilfe!
::ist das für statische Methoden.
::ruft eine statische Methode für die Klasse auf.
$this->context->addViolationAufrufs verwendet, innerhalb desif.