PHPUnit ile kod kapsama;

2 Cevap php

Xdebug kod kapsama, bu hat "return false;" gösterir (Aşağıda "! $ R") olarak benim testleri kapsamında değildir. Ancak, $ sql temelde sabit kodlanmış. Bunu nasıl üzerinde kapsama alabilirim? Ben bir şekilde "$ tablo" üzerine yazılsın mı? Veya testin bu bölümü için veritabanı sunucusu öldürecek?

Ben bu muhtemelen doğru, çok iyi benim modeli yazmıyorum bana sanırım? Ben de bunu test edemez çünkü. Bunu nasıl daha iyi yazabilirim?

Bu hat kapalı olmadığı için, bütün yöntem kapalı ve raporlar kapalı değildir.

Ben phpunit oldukça yeniyim. Teşekkürler.


public function retrieve_all()
{
    $table = $this->tablename();
    $sql     = "SELECT t.* FROM `{$table}` as t";
    $r         = dbq ( $sql, 'read' );

    if(!$r)
    {
        return false;
    }

    $ret = array ();

    while ( $rs    = mysql_fetch_array ( $r, MYSQL_ASSOC ) )
    {
        $ret[] = $rs;
    }


    return $ret;
}

2 Cevap

Teorik olarak, daha iyi bir model ve tüm veritabanı ile ilgili kodu ayıran olmalıdır.

Exemple yılında, Zend Framework, hızlı başlangıç ​​kılavuzu var tavsiye:

  • senin modeli sınıfları
  • Rolünü veritabanı modeli içine modeli "çevirmek" için veri mappers.
  • tablolara doğrudan erişim do DAOs (veya tablo veri ağ geçidi)

Bu gerçekten ilginç bir model, ona bir bakmak olmalıdır, bu gerçekten veri modeli ayırmak ve böylelikle sadece model bölümünün üzerine testlerini gerçekleştirmek için (ve herhangi bir veritabanı bir sorun / soru umurumda değil) sağlar

But in your code, I suggest you to perform a test where you have the dbq() function to return false (maybe having the db connexion to be impossible "on purpose"), in order to have full code coverage.

Ben genellikle tüm "hata davaları" test size çok fazla zaman alır durumlarda bu tür var, bu yüzden% 100 kod kapsama sahip vazgeçmek.

Ben fonksiyon dbq(), bir veritabanı sorgusu gerçekleştirir sanırım. Sadece veritabanı bağlantısı çıkarın ve testi yeniden çalıştırın.

Veritabanı bağlantısı: Eğer sorun test var nedeni küresel bir kaynak kullanıyor olmasıdır. Normalde test yöntemi (ya da sınıf) için bağlantı nesnesi sağlayarak bu sorunu önleyeceğini.