그래서 나는 시스템 전체에서 다음과 같은 코드를 사용하고 있습니다. 우리는 현재 단위 테스트를 소급하여 작성하고 있지만 (내 주장보다 결코 늦지 않았습니다), 이것이 어떻게 테스트 될 수 있는지 보지 못합니까?
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
입니다.