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 Searchoggetto, che a sua volta viene creato da un EmailAlertoggetto. Questi Searche 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' Searchistanza. 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->addViolationchiamata, all'interno diif.