2015-11-06 16 views
5

Bir veri tabanına fikstür verileri yüklemek için çeşitli yollar olduğunu görüyorum. Ancak işlevsel bir testten sonra, veritabanına yazılanların doğruluğunu teyit etmenin en iyi/standart yolu nedir?Symfony2 işlevsel testi için, veritabanı içeriğini doğrulamak için en iyi yöntem nedir?

Phpunit paketinin, bir veri kümesini yükleyebileceğiniz ve bir tablonun içeriğini beklenen içerikle karşılaştırmak için assertTablesEqual() gibi öğeleri kullanabileceğiniz, bunun bir bölümü vardır. Ama bu Symfony2 altında kullanılabilir görünmüyor ve başka bir standart yöntem bulamıyorum.

Diğerleri bu sorunu nasıl çözer?

+0

İlgili: http://stackoverflow.com/questions/10784973/how-to-set-up-database-heavy-unit-tests-in-symfony2-using-phpunit – k0pernikus

+0

Bu soruya gördüm ama maalesef cevabın bazı yönlerini gözden kaçırmadığım sürece, fikstür oluşturma ve fonksiyonel bir testten sonra sonuçları teyit etme ile ilgili değil. – Nairebis

+2

Sadece fikstür oluşturma ile ilgili değil. Bu sadece başlangıç ​​noktanız. DB tarafında işlevsel bir test için, anında bir DB oluşturmanız, testlerinizi çalıştırmanız ve test DB'sini imha etmeniz gerekir. Fonksiyonel test içerisinde DB'nizi de sorgulayabilir ve değerleri kontrol edebilirsiniz. DB'nin erişilebilir içeriğini sınamanız gerektiğini düşünmüyorum, ancak belirli servisler DB'ye yazdıktan sonra depo veriyi doğru veriyi döndürüyorsa. Kurulum ve gözyaşı işlemlerinin her bir test durumu için çalıştırılması gerektiğini ve çalışma testinin uzun sürmesini sağlayabileceğini unutmayın. – k0pernikus

cevap

1

Symfony2 varsayılan olarak doktrin ORM kullanın veya başka bir veritabanı hareketini (münferit olarak MongoDB) ayarlayabilirsiniz. Veritabanı bağlantısını ve app\config\config.php hareketini ayarlamak/ayarlamak için app\config\parameters.php dosyasını kontrol edin. Bir ORM ile, phpunit paketi olarak bir çok şeyi kontrol etmeniz gerekmez, çünkü protokol protokolüne ve çok daha fazlasına entegre edilmiştir. Check here for more details. Eğer datafixtures yüklemek istiyorsanız

, bunu kaydetmek için gerçek veritabanı ihracat veya yalnızca test için yeni bir tane oluşturun ve bu app\config\parameters_dev.php gibi yeni bir tane oluşturun tarafından app\config\parameters.php veritabanlarını geçiş ya edebilirsiniz. Bu durumda, web sitesi ve yerel sürümünüz aynı veritabanını kullanmaz. Ayrıca app\config\parameters.php dosyasını düzenleyebilir ve .gitgnore dosyasıyla yüklemeyi de engelleyebilirsiniz.

+0

Yanıt için teşekkürler! Ancak bu, gerçekten de, fonksiyonel bir testin sonuçları üzerinde doğrulama testi yapan meselenin özüne ulaşmıyor. Test veri tabanımı yüklediğimi, işlevsel metodumu test altında çalıştırdığımı ve sonra da içeriğinin doğru olduğunu doğrulaması gereken 10 tabloda yeni satırlarım olduğunu varsayalım. Bu normalde nasıl yapılır? phpunit [bunu yapmak için tüm mekanizma] 'ya sahiptir (https://phpunit.de/manual/current/en/database.html). – Nairebis

+0

Veritabanı infosunu kontrol etmek, Symfony2'deki kötü uygulamalardır, özellikle bunları değiştirmek için. Girişler dokunabileceğiniz tek şey olmalı, [doktrin olayları] (http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/events.html) önyükleme veya bilgi kontrol etmek için postupdate, ama asla doktrin yönetimini atlayarak veritabanına sorgulama yapmayın. – user3504263

+0

Konu test ediliyor, burada fonksiyonel bir testin sonuçlarını doğrulamam gerekiyor. Doktrin olayları bununla gerçekten alakalı değildir. Soru, veritabanı sonuçlarını doğrulayan işlevsel bir test sınıfında iddialar yazmaktır. – Nairebis

0

Veritabanı sonuçları içeren bir test kümesinden bir örnek. Testinizdeki veritabanıyla doğrudan etkileşimde bulunmanız gerekiyorsa, varlık yöneticisi test için kullanılabilir hale getirilebilir. Daha fazla bilgi için bkz. this bit of documentation. Sonuçların daha genel olarak bir web sayfasında sunulduğunu ve DOM tarayıcısı tarafından okunduğunu unutmayın.

public function setUp() 
{ 
    self::bootKernel(); 
    $this->em = static::$kernel->getContainer() 
      ->get('doctrine') 
      ->getManager() 
    ; 
    $this->tool = static::$kernel->getContainer() 
      ->get('truckee.toolbox') 
    ; 

    $classes = array(
     'Truckee\VolunteerBundle\DataFixtures\SampleData\LoadFocusSkillData', 
     'Truckee\VolunteerBundle\DataFixtures\SampleData\LoadMinimumData', 
     'Truckee\VolunteerBundle\DataFixtures\SampleData\LoadStaffUserGlenshire', 
     'Truckee\VolunteerBundle\DataFixtures\SampleData\LoadStaffUserMelanzane', 
     'Truckee\VolunteerBundle\DataFixtures\SampleData\LoadOpportunity', 
     'Truckee\VolunteerBundle\DataFixtures\SampleData\LoadVolunteer', 
    ); 
    $this->loadFixtures($classes); 
    $this->client = $this->createClient(); 
    $this->client->followRedirects(); 
} 

public function testOutboxUser() 
{ 
    $crawler = $this->login('admin'); 
    $link = $crawler->selectLink("Send alerts to organizations")->link(); 
    $crawler = $this->client->click($link); 
    $outboxObj = $this->em->getRepository('TruckeeVolunteerBundle:AdminOutbox')->findAll(); 
    $outbox = $outboxObj[0]; 
    $recipient = $outbox->getRecipientId(); 
    $type = $this->tool->getTypeFromId($recipient); 

    $this->assertEquals('staff', $type); 
} 
İlgili konular