PHP ünitesinde alay nesneleri oluşturma

1 Cevap php

Ben aradım ama oldukça ben aradığım bulamıyor ve manuel bu konuda çok yardımcı değildir. Ben de tüm doğru yolda olduğumu eğer emin değil birim test için oldukça yeni, bu yüzden. Neyse, soru üzerine. Ben bir sınıf vardır:

<?php
    class testClass {
        public function doSomething($array_of_stuff) {
            return AnotherClass::returnRandomElement($array_of_stuff);
        }
    }
?>

Şimdi, açıkça ben AnotherClass::returnRandomElement($array_of_stuff); aynı şeyi her zaman geri dönmek istiyorum. Benim soru benim birim sınama, nasıl bu nesneyi mockup mi, nedir?

Ben test dosyasının üstüne AnotherClass ekleyerek denedim, ama ben test etmek istiyorum AnotherClass ben "sınıf Redeclare" hatası alıyorum.

Ben fabrika sınıflarını anlıyorum, ama ben bu durumda o geçerli olacak nasıl emin değilim. Ben test verileri içerdiği tamamen ayrı AnotherClass sınıf yazmak ve daha sonra yerine gerçek AnotherClass bu yüklemek için Fabrika sınıfını kullanmak gerekir? Veya Fabrika deseni sadece bir kırmızı ringa kullanıyor.

Ben bu çalıştı:

    $RedirectUtils_stub = $this->getMockForAbstractClass('RedirectUtils');

    $o1 = new stdClass();
    $o1->id = 2;
    $o1->test_id = 2;
    $o1->weight = 60;
    $o1->data = "http://www.google.com/?ffdfd=fdfdfdfd?route=1";
    $RedirectUtils_stub->expects($this->any())
         ->method('chooseRandomRoot')
         ->will($this->returnValue($o1));
    $RedirectUtils_stub->expects($this->any())
         ->method('decodeQueryString')
         ->will($this->returnValue(array()));

setUp () işlevi, ancak bu taslakları göz ardı edilir ve ben bunu yapıyorum yanlış bir şey, ya da ben AnotherClass yöntemleri erişen ediyorum yolu olup olmadığını çalışamaz.

Yardım! Bu beni deli ediyor.

1 Cevap

Birim testleri ile statik verileri içeren 'test' sınıfları oluşturmak, ve sonra test sınıfa bu geçmek istiyorum. Bu test değişkenleri kaldırır.

class Factory{
    function build()
    {
    	$reader = new reader();
    	$test = new test($reader);
    	// ..... do stuff
    }

}

class Factory{
    function build()
    {
    	$reader = new reader_mock();
    	$test = new test($reader);
    	// ..... do stuff
    }

}
class reader_mock
{
    function doStuff()
    {
    	return true;
    }
}

Statik Sınıflar kullanırken çünkü sadece test verilerini döndürmek fonksiyonları içerir, böylece AnotherClass programı kaldırın ve sonra yeniden gerekir. Normalde olsa, sen, aslında yukarıdaki örnekte olduğu gibi derslere geçmek neden programından sınıfları kaldırmak istemiyorum.