Mockery ile Mock objeleri yaratmak

Önceki yazılarımda tddye giriş yapıp mock objelerini herhangibir araç kullanmadan yaratmıştık. İşte o yazılar:

Test Driven Development (TDD) Nedir?

PHPUnit Nasıl Kullanılır

Test Edilebilir Kod Üretmek

Birim (Unit) Testlere giriş

Mockery Nedir?

Mockery php test araçları ile kullanılabilen basit ama esnek PHP Mock obje frameworküdür.

Mockery’inin kurulumu

Mockery’i composer yardımı ile kolayca kuruyoruz. composer.json dosyamıza eklememiz gereken;

{
    "require-dev": {
        "mockery/mockery": "dev-master@dev"
    }
}

Composer Hakkında şu yazıma bakabilirsiniz: Composer Nedir? Nasıl Kullanılır?

İlk Örnek

Örneği Mockery’inin kendi dokümanından aldım.

class Sicaklik
{
    public $_service;

    public function __construct(SicaklikServisi $service)
    {
        $this->_service = $service;
    }

    public function ortalama()
    {
        $toplam = 0;
        for ($i=0;$i<3;$i++) {
            $toplam += $this->_service->sicaklikOlc();
        }
        return $toplam/3;
    }

}

Bu sınıfın özelliği dışarıdan aldığı $service objesi ile ölçtüğü sıcaklıkların ortalamasını alan bir methodu barındırması.

Bizim test edeceğimiz sınıf Sicaklik bu yüzden $service objesinden haberimizin olmasına gerek yok. Sıcaklığı ölçen $service zaten kendisi test edilmiş ve çalıştığını varsayıyoruz. Yani onun kendi testleri zaten var. İşte testimiz:

class SicaklikTest extends PHPUnit_Framework_TestCase
{

    public function tearDown()
    {
        Mockery::close();
    }

    public function testSicaklikOlcMethoduUcKereCagiriliyor()
    {
        $service = Mockery::mock('SicaklikServisi');
        $service->shouldReceive('sicaklikOlc')->times(3)->andReturn(10, 12, 14);
        $sicaklik = new Sicaklik($service);
        $this->assertEquals(12, $sicaklik->ortalama());
    }

}

SicaklikServisi sınıfını mockladık. Yani şunları dedik;

SicaklikServisi‘nden sicaklikOlc() methodu 3 kere çağırılmalı ve sırayla 10 12 ve 14 döndürmeli.

Daha sonra bu Mock objesi ile Sicaklik sınıfını yaratıyoruz. Bu 3 sayının ortalaması 12 olduğu için $sicaklik->ortalama()‘nın 12 döndürmesini bekliyoruz.


 public function tearDown()
 {
     Mockery::close();
 }

Şu kısım önemli. Çünkü bu aşamadan sonra Mockery direktiflerini verdiğiniz methodların beklenen şekilde beklenen sayıda çağırılıp çağırılmadığının kontrolünü yapar. Yani örneğimizdeki method 3 değil 4 kere çağırılırsa test başarısız olacaktır.

 Sonuç

Bu yazı ile Mockery aracını tanıdık ve temel olarak nasıl kullanıldığını öğrenmiş olduk. Görüldüğü gibi kullanımı inanılmaz basit ve öğrenmeside kolay. Mockery hakkında diğer detaylara ulaşmak için Mockery GitHub Reposundaki dökümantasyonu okuyabilirsiniz.

One thought on “Mockery ile Mock objeleri yaratmak

Leave a Reply to Murat Ödünç Cancel reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax