Vì vậy, tôi có đoạn mã sau đây được sử dụng trên toàn hệ thống của mình. Chúng tôi hiện đang viết các bài kiểm tra đơn vị hồi tưởng (muộn còn hơn không bao giờ là lý lẽ của tôi), nhưng tôi không thấy điều này sẽ kiểm tra được như thế nào?
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
);
}
}
Về mặt khái niệm, điều này nên được áp dụng cho bất kỳ ngôn ngữ nào, nhưng tôi đang sử dụng PHP. Mã chỉ đơn giản là xây dựng một đối tượng truy vấn ElasticSearch, dựa trên một Search
đối tượng, lần lượt được xây dựng từ một EmailAlert
đối tượng. Những cái này Search
và EmailAlert
chỉ là của POPO.
Vấn đề của tôi là tôi không thấy làm thế nào tôi có thể thử ra các SearcherFactory
(trong đó sử dụng phương pháp tĩnh), cũng không phải SearchEntityToQueryAdapter
, mà cần kết quả từ SearcherFactory::getSearchDirector
và các Search
ví dụ. Làm cách nào để tôi tiêm thứ gì đó được tạo từ kết quả trong một phương thức? Có lẽ có một số mẫu thiết kế mà tôi không biết?
Cảm ơn vì bất kì sự giúp đỡ!
::
là dành cho các phương thức tĩnh.
::
gọi một phương thức tĩnh trên lớp.
$this->context->addViolation
cuộc gọi, bên trongif
.