2015-08-09 28 views
14

Bazı testler phpunit ile yazarken kullanmak için PDO nesnesiyle dalga geçmeye çalışıyorum, ancak oldukça karmaşık buluyorum ve bu konuda çok fazla belge bulamıyorum. Bu xml yapısı oluşturuldu:phpunit ile PDO birleştirme

<dataset> 
    <table name="providers"> 
      <column>id</column> 
      <column>name</column> 
      <column>description</column> 
      <row> 
        <value>1</value> 
        <value>provdier_1</value> 
        <value>phpunit first provider</value> 
      </row> 
    </table> 
</dataset> 

ve şimdi providers tabloyu sorgulamak ve geri verileri almak istiyorum ama bunu nasıl ben sadece cant rakam dışarı.

PDO nesnesini alayla başlattım ancak bununla nasıl çalışmalı ve bunu getConnection() yönteminin içinde nasıl kullanacağımı anlamıyorum. can ı bağlantısı 'adserverTesting.xml' dosyasıyla etkileşim hale nasıl

class AdProvidersTest extends PHPUnit_Extensions_Database_TestCase 
{ 
    public function getConnection() 
    { 
     $dsn = 'mydb'; 
     $user = ''; 
     $password = ''; 

     $pdo = $this->getMockBuilder('PDOMock') 
     ->getMock(); 

     return $this->createDefaultDBConnection($pdo, 'adserverTesting'); 
    } 

    public function getDataSet() 
    { 
     return $this->createXMLDataSet('adserverTesting.xml'); 
    } 

} 

ve nasıl: Çok burada kayboldum çünkü doğru yoldan onun oldukça uzak tahmin ediyorum benim ilk girişimi, şuna benzer Ben bu satırları kullanarak sorgu:

$ds = new PHPUnit_Extensions_Database_DataSet_QueryDataSet($this->getConnection()); 
$ds->addTable('adserverTesting', 'SELECT * FROM providers'); 

cevap

4

PDO ile dalga geçmek zorunda değilsiniz. İşte örnek nasıl çalışır:

ConnectionTest.php: db karşı testlerde

PHPUnit 4.7.6 by Sebastian Bergmann and contributors. 

. 

Time: 215 ms, Memory: 5.25Mb 

OK (1 test, 1 assertion) 

Ana nokta yapmak değildir:

<?php 

class ConnectionTest extends PHPUnit_Extensions_Database_TestCase 
{ 
    public function getConnection() 
    { 
     $database = 'myguestbook'; 
     $user = 'root'; 
     $password = ''; 
     $pdo = new PDO('mysql:host=localhost;dbname=myguestbook', $user, $password); 
     $pdo->exec('CREATE TABLE IF NOT EXISTS guestbook (id int, content text, user text, created text)'); 
     return $this->createDefaultDBConnection($pdo, $database); 
    } 

    public function getDataSet() 
    { 
     return $this->createFlatXMLDataSet(__DIR__.'/dataSets/myFlatXmlFixture.xml'); 
    } 

    public function testGetRowCount() 
    { 
     $this->assertEquals(2, $this->getConnection()->getRowCount('guestbook')); 
    } 
} 

myFlatXmlFixture.xml Sonucu

<?xml version="1.0" ?> 
<dataset> 
    <guestbook id="1" content="Hello buddy!" user="joe" created="2010-04-24 17:15:23" /> 
    <guestbook id="2" content="I like it!" user="nancy" created="2010-04-26 12:14:20" /> 
</dataset> 

Sahte db ama aynı zamanda üretim db değil ama test için db için kesinlikle aynı PDO bağlantısı oluşturmak, bu mysql, sqlite vb olabilir ...

2

Eğer documentation görüntüleme denediniz mi? Onlar dokümantasyon createXMLDataSet xml dosyası biçimine göre

<?php 

class AdProvidersTest extends PHPUnit_Extensions_Database_TestCase 
{ 
    /** 
    * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection 
    */ 
    public function getConnection() 
    { 
     $pdo = new PDO('sqlite::memory:'); 
     return $this->createDefaultDBConnection($pdo, ':memory:'); 
    } 
} 
0

yapmaya çalışıyoruz gibi xml verileri ile yükleyerek bir bellek içi sqlite bağlantısı kullanarak geleneksel PDO nesne olduğunu kullanıyor görünüyor

It is a very simple xml format where a tag inside the root node <dataset> represents exactly one row in the database. The tags name equals the table to insert the row into and an attribute represents the column. 

Ve bu xml dosyası verileri (şema değil) temsil eder.

Sorgularınızı ve sonuçlarınızı test etmek istediğinizi düşünüyorum. Yani IMHO test DB ve gerçek bağlantı kullanmak daha iyi olacaktır. http://www.liquibase.org/ gibi geçiş araçları, DB'yi hazırlamak ve geri almak için çok yararlı olabilir. Ayrıca talep/veri üretimi için bazı göstergeler kullanabilirsiniz https://packagist.org/packages/fzaninotto/faker