इसलिए मेरे पास अपने सिस्टम पर उपयोग में आने वाला कोड निम्नलिखित है। वर्तमान में हम इकाई परीक्षण पूर्वव्यापी तरीके से लिख रहे हैं (मेरे तर्क से पहले कभी भी बेहतर नहीं था), लेकिन मैं यह नहीं देखता कि यह कैसे परीक्षण योग्य होगा?
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 का उपयोग कर रहा हूं। कोड केवल एक Searchऑब्जेक्ट के आधार पर एक इलास्टिक खोज क्वेरी ऑब्जेक्ट बनाता है , जो बदले में एक EmailAlertऑब्जेक्ट से निर्मित होता है । ये Searchऔर EmailAlertकेवल POPO के हैं।
मेरी समस्या यह है कि मैं नहीं दिख रहा है मैं कैसे बाहर नकली कर सकते हैं SearcherFactory(जो स्थिर विधि का उपयोग करता), और न ही SearchEntityToQueryAdapterहै, जिसमें से परिणाम की जरूरत है SearcherFactory::getSearchDirector औरSearch उदाहरण। मैं किसी ऐसी चीज़ को कैसे इंजेक्ट कर सकता हूं जो किसी पद्धति के भीतर परिणामों से निर्मित होती है? हो सकता है कि कुछ डिज़ाइन पैटर्न हैं जिनके बारे में मुझे जानकारी नहीं है?
किसी भी मदद के लिए धन्यवाद!
::स्थिर विधियों के लिए है।
::क्लास पर एक स्थिर विधि कहता है।
$this->context->addViolationकॉल के अंदर, अंदर किया जा रहा हैif।