Bu yüzden tüm sistemde aşağıdaki kod parçası var. Şu anda birim testleri geriye dönük olarak yazıyoruz (benim argümanımdan daha geç değil), ama bunun nasıl test edilebileceğini anlamıyorum?
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
);
}
}
Kavramsal olarak bu herhangi bir dile uygulanabilir olmalıdır, ancak PHP kullanıyorum. Kod basitçe bir Searchnesneye dayalı olarak bir ElastikArama sorgu nesnesi oluşturur ve bu da bir EmailAlertnesneden oluşur. Bunlar Searchve EmailAlertsadece POPO'lar.
Benim sorunum dışarı taklit nasıl kalmamasıdır SearcherFactory(statik yöntemini kullanır), ne de SearchEntityToQueryAdapterelde edilen sonuçları ihtiyacı olan SearcherFactory::getSearchDirector veSearch örneği. Bir yöntemdeki sonuçlardan oluşturulan bir şeyi nasıl enjekte edebilirim? Belki farkında olmadığım bir tasarım deseni var mı?
Herhangi bir yardım için teşekkürler!
::statik yöntemler içindir.
::sınıfta statik bir yöntem çağırır.
$this->context->addViolationçağrının içinde, içinde kullanılıyorif.