Yeni oluşturulan örneğini alay?

1 Cevap php

i have old code which didnt use TDD now i want to write a test for a function which looks like this

function somefunction($someargs){
    // do a few checks on $someargs
    $database = new DB_PG();
    $result = $database->select($query);
    // do some changes on result
    return $result;
}

since im not much expirienced with phpunit ve testing in general my question is: how can i mock DB_PG? i tried getMock() in my test, but since the function uses "new" to get an instance my mock object is ignored, which makes sense

bu yüzden sadece 2 seçeneklerini görmek

  1. i ^ ^ burada sormak nedeni olan - PHPUnit bazı özellikleri i dont know
  2. i daha iyi olacağını biliyorum - ben eski kodunu değiştirmek zorunda

bu yüzden, herkes seçeneği 1 için bir cevabı bilir?

thx bütün

1 Cevap

OPTION 1

Eğer aşağıdaki gibi çalışmaya işlevini değiştirebilirsiniz:

function someFunc($existingArgs, $db = null)
{
    $db = (is_null($db)) = new DB_PG();
    $result = $db->select($query)

    $return $result;
}

Eğer bir db örneği iletebilirsiniz Bu şekilde, bu size en azından someFunc çalışma modellerinde olduğu gibi bu işler refactor gelecekte, bu işlevi test etmenizi sağlar, ve db yük şeyler bir dao / depo / fabrika yoluyla olur.

OPTION 2

DB_PG zaten gerektiren / Bu fonksiyon yaşadığı dosyasına dahil yoluyla çekilir değilse, test sınıf içinde bir kukla sınıf tanımlayabilirsiniz

class DB_PG
{
    public function select($query)
    {
        //use phpunit's libs to output a mock object, you'll need to use the PHPUnit_Framework_Mock::generate() static method, I think that's the name.
        return $mockResult;
    }
}

Bu şekilde sonuç ne olur kontrol edebilirsiniz.