因此,我在系统中使用了以下代码。目前,我们正在回顾性地编写单元测试(比我的观点迟来的要好得多),但是我不知道这将是可测试的吗?
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
。