Ben CodeIgniter MVC çerçevesi ile inşa edilmiş bir PHP web uygulaması var. Ben çeşitli kontrol sınıfları test etmek istiyoruz. I Toast birim test için kullanıyorum. Benim kontrolörleri işledikleri her şey ya oturuma kaydettiğiniz veya görüntülemek için görüntülemek geçirilir, hiçbir devlet var. Bir sahte oturum nesnesi yaratmak ve o düzgün çalışıp çalışmadığını test (sadece sahte bir nesne oluşturmak ve $ controller-> session = $ mock ile enjekte) basittir.
Bilmiyorum ne, manzaralı çalışmak için nasıl. : CodeIgniter'daki, görünümleri olarak yüklenir
$this->load->view($view_name, $vars, $return);
Ben CI kodunu değiştirmek istemiyorsanız bu yana, ben gerçi sahte Loader oluşturmak ve özgün yerini alabilir. Ve burada sorun yatıyor, ben CI_Loader yeni bir sınıf türetmek için bir yol bulamıyorum.
Ben sistemi / kütüphaneleri / Loader.php dosyası dahil etmezseniz, sınıf CI_Loader tanımsız ve ben ondan miras alamaz:
class Loader_mock extends CI_Loader
Ben (require_oncenin kullanarak) dosyası içerir yaparsanız, ben hata alıyorum:
Cannot redeclare class CI_Loader
CI kodu kendisini ne sebeple olursa olsun ikinci require_oncenin kullanmak değil gibi görünüyor.
Herkes burada birim test CodeIgniter çalışan uygulamalar ile deneyimi var mı?
Edit: Ben tanımsız bir mock sınıfa çalışma zamanında gerçek bir yükleyici nesne enjekte ve çağrı __ ile tüm aramaları ve değişkenleri yönlendirme, __ set, __ olsun, __ isset ve __ çalıştı. Ama (ben, gerçi sadece hayır çıktı, yani boş bir sayfa Tost herhangi bir hata alamadım) çalışmak için görünmüyor. İşte kod:
class Loader_mock
{
public $real_loader;
public $varijable = array();
public function Loader_mock($real)
{
$this->real_loader = $real;
}
public function __call($name, $arguments)
{
return $this->real_loader->$name($arguments);
}
public function __set($name, $value)
{
return $this->real_loader->$name = $value;
}
public function __isset($name)
{
return isset($this->real_loader->$name);
}
public function __unset($name)
{
unset($this->loader->$name);
}
public function __get($name)
{
return $this->real_loader->$name;
}
public function view($view, $vars = array(), $return = FALSE)
{
$varijable = $vars;
}
}