2015-01-13 2 views
1

Я работаю с Symfony2 и Doctrine 2. Я пытаюсь принять подход TDD. Может ли кто-нибудь дать мне базовый пример единичного тестового класса для класса сущности Doctrine, пожалуйста?Как написать тестовый класс для класса сущности Doctrine?

Искренне признателен за любую помощь.

+2

Я не думаю, что блок тестирования '' Doctrine'' класс сущности имеет смысл, поскольку класс сущности не должен содержать никакой логики. –

+1

Thats true. Спасибо за совет. Думаю, было бы разумнее протестировать классы репозитория, если у них есть пользовательская логика/функции. – Sid

+0

У них нет логики, но у них есть структура. Единичные тесты могут проверять структуру. Также @marcoshoya привел пример функционального теста, который можно использовать для обеспечения того, чтобы структуры таблиц не изменялись в ходе миграции. –

ответ

6

Это простой образец модульного тестирования для объекта:

class MessageTest extends \PHPUnit_Framework_TestCase { 

    /** 
    * @var Message 
    */ 
    protected $object; 

    /** 
    * Sets up the fixture, for example, opens a network connection. 
    * This method is called before a test is executed. 
    */ 
    protected function setUp() 
    { 
     $this->object = new Message(); 
    } 

    public function testGetterAndSetter() { 

     $this->assertNull($this->object->getId()); 

     $date = new \DateTime(); 

     $this->object->setDate($date); 
     $this->assertEquals($date, $this->object->getDate()); 

     $this->object->setMessage("message"); 
     $this->assertEquals("message", $this->object->getMessage()); 

     $this->object->setSuccess(true); 
     $this->assertTrue($this->object->getSuccess()); 
    } 
} 
+0

Этот тест-тест автоматически генерирует методы сущности! Вам действительно нужны тесты? – Ghasrfakhri

0

Существует хороший пример на http://symfony.com/doc/current/cookbook/testing/doctrine.html

// src/Acme/StoreBundle/Tests/Entity/ProductRepositoryFunctionalTest.php 
namespace Acme\StoreBundle\Tests\Entity; 

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; 

class ProductRepositoryFunctionalTest extends KernelTestCase 
{ 
    /** 
    * @var \Doctrine\ORM\EntityManager 
    */ 
    private $em; 

    /** 
    * {@inheritDoc} 
    */ 
    public function setUp() 
    { 
     self::bootKernel(); 
     $this->em = static::$kernel->getContainer() 
      ->get('doctrine') 
      ->getManager() 
     ; 
    } 

    public function testSearchByCategoryName() 
    { 
     $products = $this->em 
      ->getRepository('AcmeStoreBundle:Product') 
      ->searchByCategoryName('foo') 
     ; 

     $this->assertCount(1, $products); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    protected function tearDown() 
    { 
     parent::tearDown(); 
     $this->em->close(); 
    } 
} 
+4

Это тест для репозитория, а не объекта. – Roman

Смежные вопросы