Tengo el siguiente código en uso en todo mi sistema. Actualmente estamos escribiendo las pruebas unitarias de forma retrospectiva (mejor tarde que nunca fue mi argumento), pero no veo cómo esto sería verificable.
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
);
}
}
Conceptualmente, esto debería ser aplicable a cualquier idioma, pero estoy usando PHP. El código simplemente construye un objeto de consulta ElasticSearch, basado en un objeto Search
, que a su vez está construido a partir de un objeto EmailAlert
. Estos Search
y EmailAlert
's son solo POPO's.
Mi problema es que no veo cómo puedo simular el SearcherFactory
(que utiliza el método estático), ni el SearchEntityToQueryAdapter
, que necesita los resultados de SearcherFactory::getSearchDirector
y la instancia Search
. ¿Cómo inyecto algo que se construye a partir de resultados dentro de un método? Tal vez hay algún patrón de diseño que no conozco?
¡Gracias por cualquier ayuda!