Así que tengo el siguiente código en uso en todo mi sistema. Actualmente estamos escribiendo pruebas unitarias retrospectivamente (mejor tarde que nunca fue mi argumento), pero no veo cómo esto sería comprobable.
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 lenguaje, pero estoy usando PHP. El código simplemente crea un objeto de consulta ElasticSearch, basado en un Search
objeto, que a su vez está construido a partir de un EmailAlert
objeto. Estos Search
y EmailAlert
's son solo POPO's.
Mi problema es que no veo cómo puedo burlarme del SearcherFactory
(que usa el método estático), ni del SearchEntityToQueryAdapter
, que necesita los resultados SearcherFactory::getSearchDirector
y la Search
instancia. ¿Cómo se inyecta algo que se genera 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!
fuente
$this->context->addViolation
llamada, dentro delif
.::
es para métodos estáticos.::
llama a un método estático en la clase.