Я разрабатываю некоторые тесты с помощью phpUnit, и в цепочке тестов мне нужно пройти, чтобы бросить ситуацию авторизации. И для этого мне НЕОБХОДИМО подключиться к базе данных и получить Entity, над которым нельзя издеваться. Однако, если я сделаю это в setUp (), он будет подключаться к базе данных один раз для каждого выполняемого мной теста.
Как я могу подключиться и получить этот объект в базе данных один раз, а затем использовать его во всех тестах?
public function setUp()
{
$this->setApplicationConfig(include './config/application.config.php');
parent::setUp();
$serviceManager = $this->getApplicationServiceLocator();
$this->instituicao = $serviceManager->get('InstituicaoRepository')->getByUrl('uov');
}
Переменная $this->instituicao должна быть получена из базы данных, поэтому мне нужно получить ее только один раз. Но setUp вызывает его несколько раз.
Я пробовал что-то вроде этого:
private $instituicao;
public function getSharedInstituicao()
{
if ($this->instituicao == null){
$serviceManager = $this->getApplicationServiceLocator();
$this->instituicao = $serviceManager->get('InstituicaoRepository')->getByUrl('uov');
}
return $this->instituicao;
}
И удалил его из setUp и вызвал эту функцию при необходимости, но она была нулевой и каждый раз загружалась в БД.
@tadman поместил часть моего кода, я надеюсь, что это поможет вам разобраться в проблеме.






Может быть, общий fixtuere поможет
https://phpunit.de/manual/current/en/fixtures.html#fixtures.sharing-fixture? Попробуйте setUpBeforeClass и tearDownAfterClass
Я еще не пробовал. Посмотрим, как это работает.
Не сработало = / Я не могу использовать $this-> внутри setUpbeforeClass
@DavidAlves Может быть, для теста вы можете создать экземпляр InstituicaoRepository в setUpBeforeClass. Вы не тестируете сервис-менеджера и не обязательно использовать его здесь
Конкретный пример поможет.