В настоящее время я работаю над проектом ZF2/Doctrine
и пытаюсь настроить и запустить свой пакет PHPUnit
. Впервые пытаюсь написать модульные тесты для проекта ZF2, проекта Doctrine, а также впервые работаю с Mockery. Пока все хорошо, но у меня возникла проблема с Doctrine EntityManager
;
Я только что издевался над своим Doctrine\Orm\EntityManager
и хочу, чтобы вызов getRepository
с определенным параметром возвращал фиктивный репозиторий, но я хочу, чтобы вызовы других репозиториев оставались прежними. Я предполагал, что использование shouldReceive
и shouldNotReceive
рядом друг с другом будет работать, но почему-то я продолжаю получать ошибки;
class ProductControllerTest extends AbstractHttpControllerTestCase
{
public function testViewAction()
{
$serviceLocator = $this->getApplicationServiceLocator();
$entityManager = \Mockery::mock($serviceLocator->get('Doctrine\ORM\EntityManager'));
$entityManager
->shouldReceive('getRepository')
->with('App\Entity\Product')
->andReturn(\Mockery::mock('App\Repository\Product'));
$entityManager
->shouldNotReceive('getRepository')
->with(\Mockery::not('App\Entity\Product'));
$serviceLocator
->setAllowOverride(true)
->setService('Doctrine\ORM\EntityManager', $entityManager);
$this->dispatch('/products/first-product');
$this->assertResponseStatusCode(200);
}
}
Причина, по которой мне нужна эта конкретная вещь, заключается в том, что я просто хочу написать тест для этого фрагмента кода. Некоторый базовый код не идеален, поэтому, пожалуйста, помогите мне сосредоточиться на этой части, но я хочу иметь возможность реорганизовать базовые фрагменты кода без нарушения работы моего приложения. Нужно с чего-то начать, чтобы сделать мое приложение полностью тестируемым;)
Но есть ли в моей логике что-то ошибочное или я что-то упускаю? Большое спасибо!