Ö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?
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.
Sanırım Mockery üzerine yazılan ilk türkçe yazıdır..
Teşekkürler..