Kurulum
Magento 1, besteciyi kutudan çıkardığı için , phpunit'i composer kullanarak kurarsanız veya sadece phar sürümünü indirirseniz büyük bir fark yarattığını düşünmüyorum .
Sitenizdeki diğer üçüncü taraf modüllerini veya kitaplıklarını yönetmek için zaten besteci kullanıyorsanız, besteci muhtemelen en mantıklıdır. PHP7 kullanmadığınız sürece phpunit'in eski bir sürümü ile sınırlı olacaksınız (bu yüzden yukarıdaki 4.8 sürümüne bağlandım).
Entegrasyon Testleri / ve / veya Birim Testleri
Magento 1 bu kadar ağır bir uygulama olduğundan, phpunit bootstrap'ı entegrasyon için bir tane ve birim testleri için bir tane olarak ayırmak mantıklıdır.
Birim sınama önyüklemesinin yalnızca otomatik yükleyiciyi başlatması gerekirken, tümleştirme sınama önyüklemesinin yapılandırma yüklemesi ve db bağlantısı da dahil olmak üzere tüm uygulama ortamını başlatması gerekir.
Bu nedenle Magento'daki entegrasyon testleri, birim testlerden çok daha yavaş çalışma eğilimindedir (diğer uygulamalardan daha da fazla).
Phpunit içine Magento Bootstrapping
Magento'nun otomatik yükleyicisi PSR-0 uyumlu değildir, çünkü bir sınıfın bulunduğu dosyayı bulamazsa bir istisna atar. Bu class_exists
phpunit içinde bazı kullanımlarını kırar . Birkaç olası (hacky ise) geçici çözüm vardır:
- Magento otomatik yükleyicinin kaydını kaldırın,
\Varien_Autoload::autoload()
içine atılan istisnaları yoksayarak bir dekoratöre sarın ve ambalajı yeni bir otomatik yükleyici olarak kaydedin. Bunun, otomatik yükleyicileri kaydeden ve belirli bir otomatik yükleyici sırasına bağlı olan üçüncü taraf kitaplıklarıyla çakışma olasılığı düşüktür.
- Magento 1'de yerleşik olanı saran özel bir hata işleyici kullanın. Özel hata işleyicileri, Magento otomatik yükleyici tarafından tetiklenen hataları yutar. Raphael'in test çerçevesinin kullandığı çözüm budur . Bu, diğer üçüncü taraf uzantılarıyla en uyumlu gibi görünüyor.
\Varien_Autoload::autoload()
Dosya yoksa hatayı atmamak için geçersiz kılmak için dahil etme yolunu kullanın . Ancak bu, aynı sınıfı geçersiz kılan birkaç modülle çakışıyor. Bu yaklaşımı kendim kullanmıyorum.
Oturum sırasında hata oluşmasını önlemek için testler sırasında $_SESSON = []
önyüklemede ayarlamanız yeterlidir .
Mage::app()->setResponse($testResponse)
Gerçek olanı genişleten, ancak çıktı veya üstbilgi göndermeyen özel bir yanıt nesnesi ayarlayın .
Magento'yu çalışma zamanı durumunu tamamen değiştiren entegrasyon testleri arasında yeniden başlatmak için kullanın Mage::reset(); Mage::app()
. Bundan sonra hata işleyicinin yeniden dekore edilmesi gerektiğini unutmayın.
Fikstür
DB fikstürleri için, örneğin fikstür oluşturmak için fikstür yöntemlerinde normal modelleri kullanma eğilimindeyim createSimpleProduct($sku)
. Raphael'in dediği gibi, testi testten sonra geri alınan bir işlemde (örneğin ) sarmak için setUp()
ve tearDown()
tuşlarını kullanın Mage::getSingleton('core/resource')->getConnection('default_setup')->beginTransaction()
.
Mağaza yapılandırma armatürleri için, yalnızca bellek içi armatürleri kullanarak ayarlama eğilimindeyim Mage::app()->getStore()->setConfig($path, $value)
.
EcomDev_PHPUnit
Bu uzantı yaml dosyalarını kullanarak DB armatürleri oluşturmak için seçenek sunar, fakat kendim için ben bu sert modeli sınıfları kullanılarak oluşturulmuş armatürleri ile karşılaştırıldığında korumak için bulabilirsiniz. YMMV.
Test Çiftleri
Kayıt defteri Mage::getSingleton()
, Mage::getResourceSingleton()
ve aracılığıyla oluşturulan nesneler için test çiftlerini enjekte etmek için kullanılabilir Mage::helper()
.
Diğer bazı merkezi nesneler ayarlanabilir Mage::app()
(örneğin istek). Test çiftleri
aracılığıyla Mage::getModel()
veya Mage::getResourceModel()
test çiftleriyle oluşturulan sınıfları değiştirmek için özel bir yapılandırma nesnesi sarmalayıcısı kullanılmalıdır. Bkz bu örneği olduğunu nasıl gerçekleştirilebileceği Raphael'in testi çerçevesinde.
özet
Magento önyüklendiğinde, hemen hemen her şey oldukça güzel bir şekilde test edilebilir. Çekirdek kod zincirleme yönteminin büyük miktarda nedeniyle derin alaylar oluşturmak için hazırlıklı olsa da kullanır.
Kurulum hacky olmasına rağmen, iyi çalışıyor ve testlerin bana bir çok güven ve değer verdiğini, bir Symphony uygulaması için bir test paketiyle karşılaştırılabilir olduğunu düşünüyorum.