Получите контейнер Symfony2 из теста [дубликат]

if(a==b)
    println("a equals b");

Вы можете использовать оператор IF без {}, если есть только одна строка, которая должна быть выполнена, поэтому, используя if(a==b);, вы говорите, если они равны, выполняют и пустую инструкцию ... Так что это будет ничего не делать, а затем вернуться в ваш обычный цикл, вне блока IF.

36
задан j0k 20 September 2012 в 12:40
поделиться

3 ответа

Поддержка теперь встроена в Symfony. См. http://symfony.com/doc/master/cookbook/testing/doctrine.html

Вот что вы могли бы сделать:

namespace AppBundle\Tests;

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

class MyDatabaseTest extends KernelTestCase
{
    private $container;

    public function setUp()
    {
        self::bootKernel();

        $this->container = self::$kernel->getContainer();
    }
}

Для более современной и переработанной техники см. https://gist.github.com/jakzal/a24467c2e57d835dcb65 .

Обратите внимание, что использование контейнера в модульных тестах пахнет. Как правило, это означает, что ваши классы зависят от всего контейнера (весь мир), и это плохо. Вы должны ограничить свои зависимости и высмеять их.

87
ответ дан Jakub Zalas 19 August 2018 в 05:33
поделиться

Вы можете использовать это в своей функции настройки

protected $client;
protected $em;

/**
 * PHP UNIT SETUP FOR MEMORY USAGE
 * @SuppressWarnings(PHPMD.UnusedLocalVariable) crawler set instance for test.
 */
public function setUp()
{
    $this->client = static::createClient(array(
            'environment' => 'test',
    ),
        array(
            'HTTP_HOST' => 'host.tst',
            'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0',
    ));

    static::$kernel = static::createKernel();
    static::$kernel->boot();
    $this->em = static::$kernel->getContainer()
                               ->get('doctrine')
                               ->getManager();
    $crawler = $this->client->followRedirects();
}

Не забудьте установить функцию разрыва

    protected function tearDown()
{
    $this->em->close();
    unset($this->client, $this->em,);
}
12
ответ дан Babou34090 19 August 2018 в 05:33
поделиться
  • 1
    Этот комментарий должен быть выбран. Спасибо, сэр! – Dano 20 February 2015 в 00:51

Обновление 2018: с Symfony 3.4 / 4.0 существует проблема с тестированием службы.

Он называется «тестирование частных сервисов», возможные решения описаны здесь


Для различных различных конфигураций вы также используете пакет lastzero / test-tools .

Он настраивает контейнер для вас и готов к использованию:

use TestTools\TestCase\UnitTestCase;

class FooTest extends UnitTestCase
{
    protected $foo;

    public function setUp()
    {
        $this->foo = $this->get('foo');
    }

    public function testBar()
    {
        $result = $this->foo->bar('Pi', 2);
        $this->assertEquals(3.14, $result);
    }
}
0
ответ дан Tomáš Votruba 19 August 2018 в 05:33
поделиться
  • 1
    [Д0] tomasvotruba.cz/blog/2018/05/17/… – Tomáš Votruba 30 May 2018 в 17:52
  • 2
    Вы можете создавать файлы services_test.yaml, определять псевдонимы для тех служб, к которым хотите получить доступ, и сделать их общедоступными – Federico J. Álvarez Valero 9 August 2018 в 11:44
  • 3
    Это самый худший способ провести время программирования, см. tomasvotruba.cz/blog/2018/05/17/… – Tomáš Votruba 9 August 2018 в 12:07
Другие вопросы по тегам:

Похожие вопросы: