如何在單元測試中訪問Symfony 2容器?我的圖書館需要它,所以它是至關重要的通過單元測試訪問Symfony 2容器?
測試類延伸\PHPUnit_Framework_TestCase
所以沒有容器。
如何在單元測試中訪問Symfony 2容器?我的圖書館需要它,所以它是至關重要的通過單元測試訪問Symfony 2容器?
測試類延伸\PHPUnit_Framework_TestCase
所以沒有容器。
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。
請注意,在單元測試中使用容器聞起來。一般來說,這意味着你的課程取決於整個容器(整個世界),這並不好。你應該限制你的依賴並嘲笑它們。
你可以利用這一點,在你的設置功能
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,);
}
應該選擇此評論。謝謝你,先生! – DanR
出於各種不同的configs你也可以使用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);
}
}
http://stackoverflow.com/questions/7004601/symfony2-testing-entity-validation-constraints/7016258#7016258 – JamesHalsall