Premise
Ben bir test çalıştırdığınızda farklı hareket kod yazma hilariously kötü bir uygulama olduğunu biliyorum, ama aslında gerekli olabilecek bir senaryo rastlamak may've.
Özellikle, Zend çerçevesinde HTML Arıtma için çok özel bir sarıcı test etmek çalışıyorum - Görünüm Yardımcısı, kesin olmalıdır. Biz başka türlü autoloaders için farklı bir mantık kullanır, çünkü HTML Arıtma autoloader gereklidir.
Problem
require()-ing benim Görünüm Yardımcısı sınıfın üstündeki autoloader, bana verir aşağıdaki in test-scope:
HTML Purifier autoloader registrar is not compatible with non-static object methods due to PHP Bug #44144; Please do not use HTMLPurifier.autoload.php (or any file that includes this file); instead, place the code: spl_autoload_register(array('HTMLPurifier_Bootstrap', 'autoload')) after your own autoloaders.
Reklamı gibi spl_autoload_register(array('HTMLPurifier_Bootstrap', 'autoload'))
ile require() değiştirilmesi testi iyi çalışır anlamına gelir, ama Görünüm Yardımcısı iddia korkunç bir ölüm ölür:
Zend_Log [3707]: ErrorController "Geçti dizi varolan statik yöntem (sınıf 'HTMLPurifier_Bootstrap' bulunamadı) belirtmiyor" LogicException yakalandı
(Bizim test klasör yapısı gerekliliği bizim Zend klasör yapısı biraz farklıdır.)
Question(s)
Onunla müdahalesi sonra, ben şeyler deney kapsamında olup olmadığına bağlı olarak, bir otomatik yükleyici-yükleme almak gerekir düşünüyorum.
Ben nedeniyle tünel vizyonuna göremiyorum her iki durumda HTMLPurifier en autoloading rutin eklemek için başka bir seçenek var mı?
Eğer değilse, benim kendi kodu (örn. APPLICATION_ENV) ile test ortamı ve üretim ortamında bu ayırt etmek için bir yol bulmak zorunda - Ben kontrol edebilir veya sabit ayarlayarak doğal olarak benim bu godawful hackery destekleyen PHPUnit yok edip onun oldu defined(), veya benzer maskaralık? (My Google-fu burada zayıf! Ben muhtemelen sadece yanlış yapıyorum.)