Используйте переменную несколько раз в PHPUnit, не получая ее снова

Я разрабатываю некоторые тесты с помощью 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 20.03.2018 19:30

@tadman поместил часть моего кода, я надеюсь, что это поможет вам разобраться в проблеме.

David Alves 20.03.2018 19:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
35
1

Ответы 1

Может быть, общий fixtuere поможет https://phpunit.de/manual/current/en/fixtures.html#fixtures.sharing-fixture? Попробуйте setUpBeforeClass и tearDownAfterClass

Я еще не пробовал. Посмотрим, как это работает.

David Alves 20.03.2018 19:46

Не сработало = / Я не могу использовать $this-> внутри setUpbeforeClass

David Alves 20.03.2018 20:38

@DavidAlves Может быть, для теста вы можете создать экземпляр InstituicaoRepository в setUpBeforeClass. Вы не тестируете сервис-менеджера и не обязательно использовать его здесь

quentino 20.03.2018 22:16

Другие вопросы по теме