Quindi ho la seguente parte di codice in uso su tutto il mio sistema. Al momento stiamo scrivendo i test unitari in modo retrospettivo (meglio tardi di quanto non sia mai stato il mio argomento), ma non vedo come questo sarebbe testabile?
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
);
}
}
Concettualmente questo dovrebbe essere applicabile a qualsiasi lingua, ma sto usando PHP. Il codice crea semplicemente un oggetto query ElasticSearch, basato su un oggetto Search
, che a sua volta è costituito da un oggetto EmailAlert
. Questi Search
e EmailAlert
sono solo POPO.
Il mio problema è che non vedo come posso prendere in giro il SearcherFactory
(che usa il metodo statico), né il SearchEntityToQueryAdapter
, che ha bisogno dei risultati di SearcherFactory::getSearchDirector
e l'istanza Search
. Come faccio a iniettare qualcosa che si costruisce dai risultati all'interno di un metodo? Forse c'è qualche schema di progettazione di cui non sono a conoscenza?
Grazie per l'aiuto!