У меня есть класс обслуживания:
class OutletTableWriter
{
private $validator;
private $entityManager;
public function __construct(ValidatorInterface $validator, EntityManagerInterface $em)
{
$this->validator = $validator;
$this->em = $em;
}
// inserts outlet to db
public function insertOutlet($outletName, $buildingName = null, $propertyNumber, $streetName, $area, $town, $contactNumber, $postcode)
{
$outlet = new Outlet();
$outlet->setOutletName($outletName);
$outlet->setBuildingName($buildingName);
$outlet->setPropertyNumber($propertyNumber);
$outlet->setStreetName($streetName);
$outlet->setArea($area);
$outlet->setTown($town);
$outlet->setContactNumber($contactNumber);
$outlet->setPostCode($postcode);
$outlet->setIsActive(0);
// $validator = $this->get('validator'); // validate constraints
$errors = $this->validator->validate($outlet);
if (count($errors) > 0) {
$response = new Response('', 422, array('content-type' => 'text/html'));
$errorsString = (string) $errors;
$response->setContent($errorsString);
return $response;
}
$this->em->persist($outlet);
$this->em->flush(); // save
return new Response('Outlet #'.$outlet->getId().' has been successfully saved.', 201);
}
Это работает, как ожидалось.Однако у меня возникают проблемы при тестировании функциональности этого класса.У меня есть следующий метод тестирования:
public function testUnsuccessfulInsertOutlet()
{
$mockValidator = $this->getMockBuilder(ValidatorInterface::class)
->disableOriginalConstructor()
->getMock();
$mockEm = $this->getMockBuilder(EntityManagerInterface::class)
->disableOriginalConstructor()->getMock();
$outletTableWriter = new OutletTableWriter($mockValidator, $mockEm);
$response = $outletTableWriter->insertOutlet(
'', '', '', '', '', '', 'EXX 1XX'
);
$this->assertEquals(422, $response->getStatusCode());
}
Валидатор должен потерпеть неудачу, вместо этого кажется, что никакой проверки не сделано (ответ 201 возвращается).Я чувствую, что это как-то связано с тем, как я высмеиваю класс валидатора (нужно ли его вообще пересмеивать?) Я попытался передать только объект самого класса, и это привело к следующему исключению: Error: Cannot instantiate interface Symfony\Component\Validator\Validator\ValidatorInterface
.
Я пользуюсь Symfony 3.4.6.
Благодарю за любые советы.