How to set up database-heavy unit tests in Symfony2 using PHPUnit?

后端 未结 3 999
粉色の甜心
粉色の甜心 2020-12-23 16:21

I am quite new to the world of testing and I want to make sure I am on the right track.

I am trying to setup unit tests in a symfony2 project using phpu

3条回答
  •  有刺的猬
    2020-12-23 17:11

    You can use this class:

    kernel = new \AppKernel('test', true);
        $this->kernel->boot();
    
        // Store the container and the entity manager in test case properties
        $this->container = $this->kernel->getContainer();
        $this->entityManager = $this->container->get('doctrine')->getEntityManager();
    
        // Build the schema for sqlite
        $this->generateSchema();
    
    
        parent::setUp();
    }
    
    public function tearDown()
    {
        // Shutdown the kernel.
        $this->kernel->shutdown();
    
        parent::tearDown();
    }
    
    protected function generateSchema()
    {
        // Get the metadatas of the application to create the schema.
        $metadatas = $this->getMetadatas();
    
        if ( ! empty($metadatas)) {
            // Create SchemaTool
            $tool = new SchemaTool($this->entityManager);
            $tool->createSchema($metadatas);
        } else {
            throw new Doctrine\DBAL\Schema\SchemaException('No Metadata Classes to process.');
        }
    }
    
    /**
     * Overwrite this method to get specific metadatas.
     *
     * @return Array
     */
    protected function getMetadatas()
    {
        return $this->entityManager->getMetadataFactory()->getAllMetadata();
    }
    }
    

    And then you can test your entity. Something like this (assuming you have a entity User)

    //Entity Test
    class EntityTest extends TestCase {
    
        protected $user;
    
        public function setUp()
        {
             parent::setUp();
             $this->user = new User();
             $this->user->setUsername('username');
             $this->user->setPassword('p4ssw0rd');
    
    
             $this->entityManager->persist($this->user);
             $this->entityManager->flush();
    
        }
    
        public function testUser(){
    
             $this->assertEquals($this->user->getUserName(), "username");
             ...
    
        }
    
    }
    

    Hope this help.

    Source: theodo.fr/blog/2011/09/symfony2-unit-database-tests

提交回复
热议问题