Modüllerimi yazarken, onlara uygulamanın en kritik kısımları için birim testleri sağlamaya çalışıyorum. Bununla birlikte, şu anda (Magento 2.1.3) birim testleri yazmanın birkaç yolu vardır:
Testin farklı yolları
- Entegre edin
bin/magento dev:tests:run unit
ve Magento ile birlikte gelen varsayılan phpunit ayarlarının üzerinde çalıştırın. - Ayrı olarak yaz, çalıştır
vendor/bin/phpunit app/code/Vendor/Module/Test/Unit
ve Magento olan herşeyle alay et. - Onları ayrı ayrı yaz, her şeyle alay et ve PHPUnit'in sistem global versiyonunu kullan.
- Bunları ayrı yazınız, çalıştırınız
vendor/bin/phpunit
fakat yine de faydalanınız\Magento\Framework\TestFramework\Unit\Helper\ObjectManager
.
Magento 2 ve PHP Birimi
Bunun yanı sıra, Magento 2, PHP7 uyumlu olmayan PHPUnit 4.1.0 ile birlikte gelir. Yazım kurallarına göre yerliler (like string
and `int) ve imzalarınızda dönüş türlerinin bildirilmesi hatalar verecektir. Örneğin, bunun gibi bir yöntem imzasına sahip bir arayüz / sınıf:
public function foo(string $bar) : bool;
... PHPUnit 4.1.0 ile alay edilemez. :-(
Şu anki durumum
Bu yüzden şu anda çoğunlukla ünite testlerimi üçüncü şekilde yazıyorum (sistem-global PHPUnit versiyonunu arayarak).
Kurulumumda, dünya çapında PHPUnit 5.6 yüklüyüm, bu yüzden uygun PHP7 kodunu yazabilirim, ancak bazı değişiklikler yapmalıyım. Örneğin:
phpunit.xml
Besteci otomatik yükleyiciden faydalanabilmem için şöyle görünmesi gerekiyor:
<?xml version="1.0"?>
<phpunit bootstrap="../../../../../../vendor/autoload.php"
colors="true">
<testsuites>
<testsuite name="Testsuite">
<directory>.</directory>
</testsuite>
</testsuites>
</phpunit>
... ve tüm setUp()
-metodlarımda, aşağıdaki onaylara sahibim, böylece testlerimi ileriye dönük uyumlulukla yazabilirim:
// Only allow PHPUnit 5.x:
if (version_compare(\PHPUnit_Runner_Version::id(), '5', '<')) {
$this->markTestSkipped();
}
Bu sayede testlerim Magentos'un yerleşik PHPUnit'i tarafından yapıldığında hata yapmaz.
Benim sorum
İşte benim sorum: bu birim testi yazmanın 'sağlıklı' bir yolu mu? Çünkü Magento'nun test etmenize yardımcı olacak bir sürü araçla birlikte geldiği doğru gözükmüyor ve bunları kullanamıyorum çünkü PHP7 kullanıyorum. GitHub'da bu sorunu çözen biletler olduğunu biliyorum, ancak topluluğun şu anda testleri nasıl yazdığını merak ediyorum.
Magento 2'de birim testleri yazmanın bir yolu var, bu yüzden kodumu 'düşürmem' gerekmiyor ve yine de Magentos'un yerleşik yardımcılarını nesne yöneticisinin dokunduğu her şeyi alay etmek için kullanabilir miyim? Yoksa birim testlerinde bile nesne yöneticisini kullanmak kötü bir uygulama mı?
Kendi özel modüllerinizi nasıl test edeceğinize dair doğru yolun ne olduğuna dair birçok rehberlik / örnek eksik.