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 Search
nesneye dayalı olarak bir ElastikArama sorgu nesnesi oluşturur ve bu da bir EmailAlert
nesneden oluşur. Bunlar Search
ve EmailAlert
sadece POPO'lar.
Benim sorunum dışarı taklit nasıl kalmamasıdır SearcherFactory
(statik yöntemini kullanır), ne de SearchEntityToQueryAdapter
elde 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
.