2010-08-25 25 views
10

Herkes, DBUnit katmanını PHPUNit testlerime eklemeyle nasıl başlayacağınız hakkında iyi, çalışan bir eğitici veya kitap ile ilgili bir bağlantıya sahip midir?PHPUnit ve DBUnit - başlangıç ​​

Ben Mysqldump komutu kullanılarak

protected function getDatabaseTester() 
{ 
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass'); 
    $connection = new PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection($pdo); 
    $tester = new PHPUnit_Extensions_Database_DefaultTester($connection); 
    $tester->setSetUpOperation(PHPUnit_Extensions_Database_Operation_Factory::CLEAN_INSERT()); 
    $tester->setTearDownOperation(PHPUnit_Extensions_Database_Operation_Factory::NONE()); 
    /* 
    * the next line fails with the error 

    PHP Fatal error: __autoload(): Failed opening required 'PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet.php' (include_path= *** 

    */ 
    $tester->setDataSet(new PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet(dirname(__FILE__).'/../../../files/xml_database_export.xml')); 
    return $tester; 
} 

XML oluşturulur kod aşağıdaki denedim. Mutlu bir şekilde CSV'yi kullanabilir, hatta bellekte bir dizi bile (ne işe yarıyorsa)

Bu sisteme henüz başlamak üzereyim.

bir PHPUnit kılavuzunda Veritabanı testine bölüm vardır

cevap

9

:

Ve PHPUnit

blog yayınını (gerçi 2008) konu üzerine PHPUnit yazarı Sebastian Bergmann tarafından da vardır: Canlı Mike tarafından

Hatta bazıları eski blog yayınları, yazar DbUnit uzatma

bulunabilir

daha güncel bir öğretici (2010) Matta Turland en Blog olurdu: Ayrıca resmi destek almak için #phpunit on Freenode IRC ziyaret edebilirsiniz

.

+2

DbUnit'i öğrenmek için iyi bir zaman geçtikten sonra, birisinin bana sadece bir tabloyu TRUNCATE (siler) yazdığını ve bir XML'den sağladığınız özel verilerle doldurduğunu söylemiş olsaydım. Anlaşılan, bu kadar. Büyülü kalıcı bağlantı yok, Avatar benzeri bir büyüme ve hayal dünyası ve geçici veri kümeleriyle dalga geçiyor. Günün sonunda, aynı şeyi “CREATE TEMPORARY TABLE” ile aynı şeyi yapabilirim, ki bu da ilişkileri koruduğu için daha da iyidir. Bu yüzden 'bu berbat uzantıyla zamanınızı boşa harcamayın' gibi bir şey söylemek isterdim, fakat sınırlı deneyimim nedeniyle, ben yapmayacağım. – Ben

+1

Buradayken, bir an beni anlamaya çalışan bir kaç şey rapor edeceğim: "setUp()" yöntemine sahipseniz, parent :: setUp() işlevini çağırmanız gerekir. veritabanı doldurmayacak. Ve bu yöntemde, DbUnit, 'setUp()' olduğunda 'PDO :: ATTR_ERRMODE''nuzu" istisna "seviyesine yükseltecektir. Böylece," ERRMODE_SILENT "olsaydı bile beklemediğiniz durumlar için istisnalar elde edersiniz. onlar. Ayrıca, bir API bulamıyorum, bu yüzden kaynak kodunu incelemeniz ya da belgelere benzer bir kitap okumalısınız, ancak metin sayfalarında saklı önemli taşlar var./ rant – Ben

+0

Yanıltıcı olmasından dolayı üzgünüm, “OLUŞTURMA TABLOSU OLUŞTUR” ilişkisini sürdürdüğünü söyledim - aslında, yabancı anahtarları korumaz. Yine de endişelenmeyin, aynı şeyi başarmak için bir 'CREATE TABLE' türünde değişkene geçin. – Ben