Quindi ho il seguente codice in uso in tutto il mio sistema. Attualmente stiamo scrivendo i test unitari in modo retrospettivo (meglio tardi che 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 Search
oggetto, che a sua volta viene creato da un EmailAlert
oggetto. Questi Search
e EmailAlert
'solo POPO.
Il mio problema è che non vedo come posso deridere la SearcherFactory
(che utilizza il metodo statico), né il SearchEntityToQueryAdapter
, che ha bisogno i risultati SearcherFactory::getSearchDirector
e l' Search
istanza. Come iniettare qualcosa che viene creato dai risultati all'interno di un metodo? Forse c'è qualche modello di design di cui non sono a conoscenza?
Grazie per qualsiasi aiuto!
::
è per metodi statici.
::
chiama un metodo statico sulla classe.
$this->context->addViolation
chiamata, all'interno diif
.