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 Search
Objekt basiert , das wiederum aus einem EmailAlert
Objekt aufgebaut ist. Dies Search
und EmailAlert
das 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 Search
Instanz 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->addViolation
Aufrufs verwendet, innerhalb desif
.