ดังนั้นฉันจึงมีรหัสชิ้นส่วนต่อไปนี้ที่ใช้งานได้ทั่วระบบของฉัน ขณะนี้เรากำลังเขียนการทดสอบหน่วยย้อนหลัง (ดีกว่าไม่เป็นอาร์กิวเมนต์ของฉัน) แต่ฉันไม่เห็นว่าสิ่งนี้จะทดสอบได้อย่างไร
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
);
}
}
แนวคิดนี้ควรใช้ได้กับทุกภาษา แต่ฉันใช้ PHP รหัสจะสร้างวัตถุแบบสอบถาม ElasticSearch โดยยึดตามSearch
วัตถุซึ่งจะถูกสร้างขึ้นจากEmailAlert
วัตถุ สิ่งเหล่านี้Search
และEmailAlert
เป็นเพียงของ POPO
ปัญหาของฉันที่ฉันไม่เห็นว่าฉันสามารถเยาะเย้ยออกSearcherFactory
(ซึ่งใช้วิธีการคง) หรือSearchEntityToQueryAdapter
ที่ต้องการผลที่ได้จากSearcherFactory::getSearchDirector
และSearch
อินสแตนซ์ ฉันจะฉีดสิ่งที่สร้างขึ้นจากผลลัพธ์ภายในวิธีการได้อย่างไร อาจมีรูปแบบการออกแบบบางอย่างที่ฉันไม่ทราบ?
ขอบคุณสำหรับความช่วยเหลือใด ๆ !
::
เป็นวิธีคงที่
::
เรียกวิธีการคงที่ในชั้นเรียน
$this->context->addViolation
if