WordPress'te Birim Testine Giriş – Temel Bilgiler


Gününüzü, işinizi doğru yaptığınızı bilerek temiz bir vicdanla bitirmekten daha iyi bir şey yoktur. Ne yazık ki, bu rahatlatıcı his web geliştiricileri arasında oldukça nadirdir—yanlış gidebilecek o kadar çok şey vardır ki (tarayıcılar, sunucular, kütüphaneler…) tamamen rahatlamak karmaşıktır, değil mi?

Bebe kırmızı yatakhane
"Kodum çalışıyor! Yaşasın! ? Şimdi üzerinde çalışmak için iyi bir zaman…?” (kaynak)

O halde bugün şanslı gününüz! (a) kodunuzun çalıştığından ve (b) “ne olursa olsun” çalışmaya devam edeceğinden emin olmak için bilmeniz gereken her şeyi size öğreteceğim bir dizi gönderi hazırladım. Başlıktan da tahmin edebileceğiniz gibi, otomatik testler kullanacağız. Ancak konuşabileceğimiz pek çok şey olduğundan, hem sunucu tarafında (PHP) hem de istemci tarafında (JavaScript) yalnızca WordPress'te birim testini tartışacağız. Diğer konuları veya test türlerini ele almamı istiyorsanız, bana bildirin, onları sıkıştıralım ???.

Bu ilk gönderide, test etme ve kullanışlılığı hakkında sadece birkaç tanımla başlayacağız. Amacım, testin günlük işlerinizde size nasıl yardımcı olabileceğine dair net bir fikir vermektir, böylece (umarım) onu kullanmaya istekli olursunuz.

(Otomatik) Testin Önemi

İtibarınızı önemsiyorsanız, işinizin kalitesine de önem vermelisiniz – eklentinizin veya temanızın yeni bir sürümünü depoya yüklemekten daha az profesyonel bir şey yoktur ve bunun işe yaramadığını keşfedenlerin kullanıcılarınız olmasına izin verin… ve neden bahsettiğimi biliyorum çünkü başıma geldi. Neyse ki, hatalarımdan ders çıkardım ve birkaç güvenlik önlemi uyguladım. Hatasız bir sürümü garanti etmek imkansızdır, ancak otomatik testler kullanarak şansı en aza indirebilirsiniz.

Eklentinizdeki veya temanızdaki herhangi bir yeni sürümün olağan geliştirme döngüsü şöyle görünür:

  1. Eklentinize eklemek istediğiniz bazı yeni gereksinimleriniz veya işlevleriniz var.
  2. Bu işlevleri uygulayan kodu yazarsınız.
  3. Sen test et.
  4. Başarısız olursa, düzeltmeye çalışın ve 3. adıma dönün.
  5. Çalıştığında, tüm gereksinimler karşılanana kadar 2., 3. ve 4. adımları yinelersiniz.
  6. Her şeyin hala beklendiği gibi çalıştığından emin olun.
  7. Yeni sürümü WordPress.org'a güncellersiniz.
  8. Ve… Bam! Birisi yeni bir hata bulur.

Oldukça karmaşık, ha? İşlerin olması gerektiği gibi çalıştığından emin olmak için birçok "manuel" test var. "Manuel" testle ilgili sorun, şeyleri yalnızca bir kez test etmenizdir; çalıştıklarını doğruladıktan sonra onları unutursunuz. Ve eğer kod statik olsaydı bu muhtemelen işe yarardı… ama kod değişir, gelişir. Bu nedenle, zaman geçtikçe bir şeyleri bozma olasılığı çok yüksektir; eklentinizi veya temanızı yeni bir işlevsellik içerecek şekilde değiştirdiğinizde, bazı öngörülemeyen yan etkiler meydana gelir ve eskiden işe yarayan şeyler artık işe yaramaz.

İdeal olarak, bir şey eskiden çalışıyorsa ve bozuk değilse, yeni bir sürüm yayınlamadan önce bileceğimizi garanti eden güvenli bir ağa ihtiyacımız var. Ve testler tam da bunun için var!

sessiz zar una
Eh, sadece güvenli ağlar hile yapamaz; paraşütler de oldukça iyi çalışıyor mu? (kaynak)

Test edilen elemanın "boyutuna" bağlı olarak, birim testleri (küçük modüller), entegrasyon testleri (bileşenlerin birlikte nasıl çalıştığı) ve kabul testleri gibi (tüm sistemi teste tabi tuttuğumuz yer, sanki normal bir kullanıcıydık). Oluşturduğumuz belirli test türünden bağımsız olarak, hepsi aynı modeli izler:

  1. Kurmak. İlk olarak, ortamı hazırlamanız gerekir, böylece ilk durum her zaman aynı olur. Örneğin, belirli bir kimliğe ve başlığa sahip yalnızca belirli bir gönderi bulunan bir veritabanı dökümü yüklemek isteyebilirsiniz.
  2. Davranmak. Ardından bu ilk durumu değiştirecek bazı eylemler uygularsınız (bir gönderi eklersiniz, başlığı değiştirirsiniz, bir yorumu silersiniz).
  3. Kontrol. Son olarak, nihai durumun/sonucun tam olarak beklediğiniz gibi olduğunu kontrol ettiniz. Bu nedenle, örneğin, blogunuzun (1)'de tek bir gönderisi varsa ve (2)'de bunu kaldırdıysanız, blogunuzun (3)'te hiç gönderi olmamasını beklersiniz.

Birim Testleri

Birim Testleri, kodunuzun çalıştığından emin olmak için atmanız gereken ilk adımdır. Yazılımınızın atomik bir parçasının (genellikle bir işlev) amaçlandığı gibi çalışıp çalışmadığını kontrol ederler. Diğer herhangi bir test gibi, bir birim testi, belirli bir girdi verildiğinde beklenen çıktıyı aldığımızı kontrol edecektir.

Buraya kadar hepsi soyut teori… o halde bir örnek görelim, olur mu? Birinin sizden bir miktar para verildiğinde karşılık gelen KDV'yi döndüren bir işlev oluşturmanızı istediğini hayal edin. İspanya'da bu %21'e ayarlanmıştır, dolayısıyla 10€'ya mal olan bir şeyin KDV'si 2,10€'dur. Bu işlevin uygulanması çok kolay, değil mi?

 function nelio_get_vat( $miktar ) {
  dönüş $miktar * 0.21;
} // nelio_get_vat()'ı sonlandır

Şimdi, fonksiyonu şu şekilde çağırırsak: nelio_get_vat(10) , beklenen sonucu alırız: 2.1 .

Şimdi işleri biraz daha baharatlı yapalım. $quantity kullanıcı tarafından verilen bir değer olduğunu varsayalım. İyi programcılar olduğumuz için, birden çok formatı kabul etmek istiyoruz (kullanıcıyı tek, belirli bir formatla değer girmeye zorlamak yerine):

  • Sade fiyat: 1000
  • Binlik ayırıcılı fiyat: 1,000 (virgül) veya 1 000 (boşluk)
  • Para birimi ile fiyat: 15€ , 15 € , 15 euros , 1 euro veya 3 EUR
  • Kuruşlu ve kuruşsuz fiyat: 15.00 , 15.50 veya 15 .
  • Önceki biçimlerin birleştirilmesi: 1200.50 1,500.00
En iyi yemek, en iyi yemek.
Para hakkında konuşmak iyi hissettiriyor, değil mi? Eh, ona sahip olmak kadar iyi değil, ama yine de…

Tüm bu biçimleri kabul etmek istiyorsak, işlev artık girişi alamaz, bunun bir sayı olduğunu 0.21 ile çarpamaz, çünkü $quantity bir sayı değil, "tuhaf" karakterlere sahip bir dize olduğu birkaç senaryo vardır. . Sonunda kullandığımız somut uygulamadan bağımsız olarak, aşağıdaki ifadelerin doğru olması gerektiğini biliyoruz:

  • Verilen fiyat 1000 ise KDV 210 .
  • Verilen fiyat 15 € ise KDV 3.15 .
  • Verilen fiyat 1.200,50 EUR ise KDV 252.11 .

ve bu tam olarak bir birim testinin doğrulayacağı şeydir. Bir birim testi, belirli bir girdi verildiğinde elde edilen sonuçların beklenen sonuca eşit olduğunu kontrol eder. Düz İngilizce'de bir birim testi şöyle görünür:

  • Hey nelio_get_vat , sana 1000 sayısını verirsem ne elde ederim? 210 bekliyorum.
  • Oye nelio_get_vat , sana 15 € dizisini verirsem ne elde ederim? 3.15 bekliyorum.
  • Oye nelio_get_vat , size 1.200,50 EUR dizisini verirsem ne elde ederim? 252.11 .

Önceki kontrollerden herhangi biri (bu arada, iddialar olarak adlandırılır) yanlışsa, test başarısız olur ve fonksiyonumuzda bir sorun olduğunu anlarız. Ayrıca, gelecekte işlevi değiştirirsek, test takımımız beklenmedik bir şekilde bir şeyi bozup bozmadığımızı algılar – eğer yaparsak, eskiden geçmekte olan test başarısız olur ve bir şeylerin yanlış olduğunu anlarız.

Entegrasyon Testleri

Az önce gördüğümüz gibi, kodumuzun atomik kısımlarını (yani, fonksiyonlar; hatta bazen sınıfları) test etmek istediğimizde birim testleri kullanırız. Ancak bir eklenti , bireysel işlevlerden çok daha fazlasıdır; eklentimizin tüm farklı parçaları bir araya geldiğinde, daha büyük bir amaca hizmet eder ve daha büyük bir sorunu çözer. Tüm farklı bileşenlerin birlikte düzgün çalıştığından emin olmak istiyorsak, yeni bir test türüne ihtiyacımız var: entegrasyon testleri.

Entegrasyon testlerini açıklamaya çalışabilirim, ancak aşağıdaki tweet bunu mükemmel bir şekilde özetliyor:

Eğlenceli değil mi? Bu video bize, ürünümüzün nihai kalitesinde her testin önemini öğretiyor. İlk olarak, hem mandal hem de kapı için yapılan bir birim testinin geçeceğini gösterir – bir yandan mandalı kilitlenecek veya kilidi açılacak şekilde doğru şekilde kaydırabiliriz ve diğer yandan kapıyı açıp kapatabiliriz. gidonu kullanarak. Harika!

Entegrasyon testi, sistemde bir sorun olduğunu gösterir. Bir entegrasyon testi, örneğin, kilitli bir mandallı kapalı bir kapının açılamadığını kontrol eder. Ama burada olan bu değil! Mandalı kilitlemiş olabiliriz ama kapı yine de açılabilir. Yani, ne oluyor?

Bazen, özelliklerini karşılayan ve bu nedenle testlerini geçen, ancak daha büyük bir bütünün parçası olarak birlikte çalışması amaçlanmayan bileşenler oluşturabiliriz. Bu durumda kullandığımız kapı türü ne mandalla ne de kapı mandalıyla uyumlu değildir, bu da “kilitli kapı”nın özelliklerini yerine getirmek için birini veya diğerini değiştirmemiz gerektiği anlamına gelir.

Kabul testleri

Bugün bahsetmek istediğim son test türü, WordCamp Europe 2015'teki (Seville'de) sunumumda ayrıntılı olarak tartıştığım kabul testleridir. Kabul testleri entegrasyon testlerine oldukça benzer çünkü ikisi de sistemi bir bütün olarak test eder.

Entegrasyon testleri, sistemi beyaz bir kutu olarak ele alır. Başlık altında ne olduğunun tam olarak farkında olarak eklentinin /temanın farklı bölümlerini kontrol ederler. Yani, bir entegrasyon testi, veritabanında neler olduğunu, hangi sonuçların hesaplandığını vb. bilir ve kontrol edebilir. Bir "geliştiricinin" yapacağı teste eşdeğerdir.

Kabul testleri ise sistemin kara kutu olduğunu varsayarak davranışını doğrular. Bir kara kutuda , kodunuzun ne yaptığını bilmiyorsunuz—normal bir kullanıcının yaptığı gibi yalnızca nihai sonucu görebilirsiniz.

Uygun aracı kullanarak (geçmişte Codeception kullandım ve bunu seviyorum), bir kullanıcının tarayıcısıyla etkileşimini simüle eden testler yazabilirsiniz. Örneğin, bir WordPress kurulumunun “Giriş” sürecini kontrol etmek istersek, aşağıdaki testi yazardık:

  1. http://local.wordpress.dev/wp-login.php gidin
  2. “David” kullanıcı adını ve “şifre ” şifresini kullanın.
  3. Oturum Aç'a tıklayın.
  4. Sayfanın sağ üst köşesindeki “Merhaba David” metnini okumayı umuyorum.

Farkı gör? Kullanıcının kimliğinin nasıl doğrulandığını bilmiyoruz, başlığın altında ne olduğu hakkında hiçbir şey bilmiyoruz… biz sadece bir kullanıcı ile sistemimiz arasındaki bir etkileşimi tanımlıyoruz. Serin!

Test Odaklı Geliştirme (TDD)

Bu gönderiyi bitirmeden önce, sizinle yazılım yazmak için "yeni" bir yaklaşım hakkında konuşmak istedim: Test Odaklı Geliştirme (TDD). Buraya kadar anlattıklarımı yakından incelerseniz iş akışının şu şekilde olduğunu göreceksiniz:

  • biraz kod yazarsın,
  • bunu doğrulayan testleri yaratırsınız,
  • testleri yürütür ve her şeyin beklendiği gibi çalıştığından emin olursunuz.

Eh, TDD işleri tam tersi şekilde yapmakla ilgilidir:

  • ilk olarak, yeni bir işlevsellik için testi yazarsınız,
  • testin başarısız olduğunu doğrularsınız (ve bu yeni işlev için herhangi bir kod yazmadığınız için başarısız olur),
  • eldeki sorunu çözmek için yeni bir kod yazarsınız,
  • testi yaparsınız ve yeni kodunuz bittikten sonra geçtiğinden emin olursunuz.

Bu metodolojiyi projelerimde hiç kullanmadım, ancak bunun oldukça şaşırtıcı olduğunu düşünüyorum. Şimdiye kadar sadece küçük örneklerde ve eğlenmek için yazdığım bazı snippet'lerde uyguladım ama günlük işlerimizde kullanmayı öğrenseydik eminim daha iyi ürünler ortaya çıkaracaktık! ?

Özetle

Neyi test ettiklerine ve nasıl test ettiklerine bağlı olarak farklı test türleri vardır. Yazmakta olduğunuz somut test ne olursa olsun, her zaman aynı modeli izleyecektir: ortamı hazırlarsınız, yapmak istediğiniz eylemleri tanımlarsınız ve hangi sonuçları beklediğinizi belirlersiniz. Elde edilen sonuçlar beklentilerinize uyuyorsa, işler harika. Eğer yapmazlarsa, bir şeyler yanlıştır ve üzerinde çalışmanız gerekir.

Bir sonraki gönderide ellerimizi kirleteceğiz ve bugün öğrendiğiniz bazı kavramları uygulamaya başlayacağız. Özellikle, PHPUnit kullanarak eklentinizin /temanızın sunucu kodunu nasıl test edeceğinizi öğreteceğim. Bizi izlemeye devam edin!

Öne Çıkan Resim, Jack Lyons tarafından.

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

Divi's Theme Builder ile Özel Global Başlık Nasıl Oluşturulur

Artık Tema Oluşturucu burada olduğuna göre, web sitenizi A'dan Z'ye kurmanıza yardımcı olacak yeni eğitimlere dalmak için sabırsızlanıyoruz. Buna Divi'nin yerleşik seçeneğini kullanarak özel başlıklar oluşturma da dahildir. Bu eğitimde Divi's Theme Builder'ı kullanarak global bir başlık oluşturmaya odaklanacağız. Bu sayfaya veya gönderiye farklı bir başlık atamadıysanız, web sitenizin her yerinde genel bir başlık görünecektir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir