Jadi saya memiliki kode berikut yang digunakan di seluruh sistem saya. Kami sedang menulis tes unit secara retrospektif (lebih baik terlambat daripada tidak pernah argumen saya), tapi saya tidak melihat bagaimana ini akan diuji?
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
);
}
}
Secara konseptual ini harus berlaku untuk bahasa apa pun, tapi saya menggunakan PHP. Kode hanya membangun objek permintaan ElasticSearch, berdasarkan pada Search
objek, yang pada gilirannya dibangun dari suatu EmailAlert
objek. Ini Search
dan EmailAlert
itu hanya POPO.
Masalah saya adalah bahwa saya tidak melihat bagaimana saya bisa mengejek keluar SearcherFactory
(yang menggunakan metode statis), maupun SearchEntityToQueryAdapter
, yang membutuhkan hasil dari SearcherFactory::getSearchDirector
dan yang Search
misalnya. Bagaimana cara menyuntikkan sesuatu yang dibangun dari hasil dalam suatu metode? Mungkin ada beberapa pola desain yang tidak saya sadari?
Terima kasih atas bantuannya!
::
untuk metode statis.
::
memanggil metode statis di kelas.
$this->context->addViolation
panggilan, di dalamif
.