WordPress için Gelişmiş OOP Bölüm 5: Entegrasyon Testi için WordPress Test Suite’i Kullanma
Son makalemde, WordPress PHP’nin geliştirilmesi için gelişmiş nesne yönelimli programlama (OOP) hakkındaki dizide, entegrasyon testleri için WordPress test takımının nasıl ayarlanacağını gösteriyorum. Daha önce, izole bir ortamda nasıl çalıştırılacağını gösterdiğim birim testi hakkında yazmıştım. Bu testler WordPress’e hiç bağlı değildir, bu nedenle sadece PHP sisteminde çalışabilirler. Öte yandan, entegrasyon testi eklentilerin ve WordPress’in etkileşimini içerir, bu nedenle tam bir WordPress’e ihtiyaç duyarlar. Testin VVV veya Docker kullanarak nasıl ayarlanacağını gösteriyorum. Eklenti örneğinde, bir docker ile çalıştırmak için bir entegrasyon testi ayarladım. Vagrant ve VVV’yi ayarlamaktan daha kolay değilse, Docker için ilk ayarların neredeyse aynı olduğunu düşünüyorum. En başından beri, yerel geliştirme için uygun olan ve sürdürülebilir entegrasyonun bir parçası olarak PHP ve JavaScript için otomatik testleri çalıştıran WordPress ortamını oluşturmak ve uygulama sistemi bir vagrandan daha basittir. Son yazımda bir Docker dosyası oluşturmak için gereken bir dosyayı gösteriyorum. Sanırım Vagrant’a benzer bir şey yapabilirim, ancak bunu bir docker olmadan yapmam gereken endişeyi veya kukla veya sunucu tedarik sistemini bilmiyorum.
Tüm bunları öğrenmek istemiyorum. Bunun yerine, sahip olduğum eklentiyi açmak ve entegrasyon testi oluşturucu WP-testlerini çalıştırmak için ortam oluşturucu WP-install ve bir tane yüklemek için bir komut yazmak istiyorum. Hepsi kurulum, şimdi bu testin nasıl yazılacağı hakkında konuşma zamanı. Özellikle, bir entegrasyon testi yazarken birim testine kıyasla nasıl farklı yapmak istediğimiz varsayımların nasıl farkına varalım. Birim testi hakkındaki makalemdeki varsayımlarımızı tersine çevirerek, bazı testlerin WordPress’in düzgün çalışacağı varsayımına nasıl dayandığını anlattım. Bu varsayıma dayanarak, yapay verilere dayanan bir test yazdım. Bu varsayım, testin genel API kodunun tutarlı olduğunu ve temel işlevin – girdi işlevi ile yapılan – işlevin olduğunu kanıtlamasını sağlar. Varsayım birimi testinin dezavantajı, tüm yan etkileri izole ederek pratik bir düzeyde anlamına gelir ve WordPress ile bağlantının doğru bir şekilde bağlandığını, tutarlı bir çıktıya sahip olacağını ve WordPress üzerinde doğru etkiyi üreteceğini varsaymamızdır. . Entegrasyon testi zıt varsayımları yapar – kodumuzu tek başına çalışmayı düşünüyoruz ve etkiyi izolasyon olmadan test ediyoruz.
Bir çamaşır küveti yaparsak, musluğun açılmasını ve kapatılmasını ve yönlendirildiği gibi sıcak veya soğuk su üretmesini sağlamak için bir birim testi yazacağız ve daha sonra suyun sadece akan değil, lavaboya girmesini sağlamak için bir entegrasyon testi yazacağız. Yere veya kısmen lavaboya girin ve biraz hızlı borudan sızın. Yazma hangi testleri test ediyoruz? Şimdiye kadar yaptığımız kod WordPress’i iki şekilde etkiler – bu kod, farklı WP_Query sonuçları ve restaus üreten bir filtre ekler. Bu nedenle, bu kodun etkisinin istediğimiz gibi eklenen filtre olduğunu ve doğru durumda, WP_Query ve API dinlenmesinin sonuçlarının beklediğimiz gibi değiştirildiğini ve var olmaması gerektiğinde bir etkisi olmadığını test etmeliyiz. Grup için filtrenin eklenmesini ve kaldırılmasını test Bu ilk test, sadece kodumuzun kancaları doğru bir şekilde ekleyebileceğini ve silebileceğini kanıtlamak istiyoruz. FilterWPQuery sınıfı bir AddFilter yöntemi () ve RemoveFilter () adlı bir yönteme sahiptir. WordPress’in filtrenin eklendiğini bildirmesine neden olan AddFilter () ‘nı test ederek bu etkileşimi örtebiliriz. Ayrıca, RemoveFilter () ‘nın WordPress’in filtrenin silindiğini bildirmesine neden olduğunu test edebiliriz. Sahip olduğumuz başka bir test, filtre eklenirse ne olur. WordPress çekirdeğinin kancayı kapsayacak bir testi vardır. Bu, bu etkiyi kapsamak için yeterlidir.
Kancanın eklenip eklenmediğini test etmek için bir sınıf örneği oluşturacağız ve bir filtre eklemek için kullanacağız ve daha sonra filtre eklenirse beklediğimiz şey olduğunu vurgulamak için bir phunit kullanacağız:
Kancanın silinebileceğini test etmek için, bir sınıf örneği oluşturacağız ve filtreyi eklemek ve daha sonra silmek ve daha sonra filtre eklenirse beklediğimiz şey olduğunu vurgulamak için bir phunit kullanacağız. Sonra silindi: Her iki test de WordPress’i etkileyebileceğimizi kanıtlıyor. WordPress’i nasıl etkilediğimizi test etmeye devam etmeden önce, filtrenin istenmeyen yan etkileri olmadığını test etmektir. Bazen hangi sevkiyatın iade edileceğini değiştiren sistemi test ediyoruz, sistemimizin WP_Query tarafından gönderildiğini her zaman değiştirmediğinden emin olmalıyız.
Sistemimiz, belirli bir API dinlenme yolu tarafından kullanıldığında WP_Query’yi değiştirmek için tasarlanmıştır. Daha sonra rotayı test edeceğiz. Şimdilik, filtrenizi ekleyeceğiz ve ardından veritabanına bir gönderi gireceğiz, ardından tüm yayınlar için WP_Query tarafından döndürülen bir gönderi olup olmadığını kontrol edeceğiz. Varsayılan olarak yapılması gereken şey budur, bir filtre eklediğimizde bunu hala yaptığından emin olalım.
Bu testte, bir yazı yapmak için WordPress test takımından bir posta fabrikası kullandık. Önceki tork yazısında tartıştığım fabrika desenini uygulayan sınıf, diğer sınıflardan nesneleri yapan sınıftır.
Fabrika kalıpları için iyi bir kullanım test verisi yapmaktır. Bir tür test verisi oluşturmak için bir standart yönteme sahip olarak – bu durumda WordPress Post – kod tekrarını azaltır ve test verilerimize güvenebileceğimizi sağlar. Bu aynı zamanda test yazmayı da kolaylaştırır. Bir posta fabrikasıyla yapılan yazı, kuyruğun sonuçlarının aynı olduğunu belirten testimizdir. Fabrika, testimizle karşılaştırıldığında beklediğimiz sonuçları yarattı. Ortaya çıkan yayınların her bölümünü test etmemiz gerekmez, WordPress Core testi WP_POST içerir. WP_Query’nin sonuçlarının test edilmesi henüz WP_QURY sonuçlarının sadece yapay veriler olduğu noktaya ulaşmamıştır. Standart her zaman WP_POST nesne dizisini doğru boyutta görüntülerken, tüm sistemin güvenilebileceğini kanıtlayan bir test istiyoruz. Daha sonra dahili olarak olanları değiştirebiliriz, endişelenmeyin, neredeyse bu makaleye ulaşırız. Bunu yaptığımızda, yeni bir kod yeni birim testi gerektirecektir. Ancak yeni bir entegrasyon testine ihtiyacımız olmayacak. Aslında, bir arama yapmak için farklı bir sistem uyguladığımızda, örneğin elasticsearch veya searchwp, bu entegrasyon testinin herhangi bir değişiklik yapmadan geçtiği gereksinimleri yapmalıyız.
Tüm bu işlevler GetPosts () yöntemine yüklenir. Dolayısıyla, yöntemi tartışmamız gereken iki test, diziyi geri yüklemek için ve diğeri dizinin doğru WP_Posts’a sahip olduğunu kanıtlamak için biridir. GetPosts () diziyi geri yüklediğini test edin. GetPosts () sonuçlarından geçerken_array () olan işlevlerin sonuçlarının doğru olduğunu vurgulamak için bir test yazıyoruz. Bunun bir dizi olduğunu kanıtlıyoruz:
Test ne tür sonuçlar içerir – dizi türünün sonuçları. Bir sonraki test, içerik içeriği – wp_post içeren diziyi içerir. Bunun için, her birinin wp_post olduğunu belirterek bir gönderi satırı almak ve sonuçları tekrarlamak için getPosts () kullanacağız: API REST rotasını test etme Tüm testler, WP_Query’nin beklediğimiz sonuçları üreteceğini kanıtlıyor, Doğru bağlamda. Bu iyi, ama bu sonuçların bu bağlamda doğru olacağını kanıtlamıyor. Şimdi, değiştirilecek şekilde tasarlanmış API’nın yanıt geri kalanındaki kod etkimizi test etme zamanı. Tork için API dinlenmesinin önceki dinlenme noktasının testini tartıştım. Makale özel bir son noktayı tartışıyor. Bu sonraki test, değiştirilmiş varsayılan bitiş noktasını içerir. Ancak test etme şeklimiz benzer. Bizi gelir testine götürecek olan gerçek HTTP talebini yapmayacağız. WordPress Core Testi tarafından kullanılanla aynı olan WP_REST_SERVER yapay kullanacağız.
WP_REST_SERVER’in yapay WordPress’in WordPress restoran davranışını doğru bir şekilde yeniden ürettiği varsayımına inanmalıyız.Bu varsayım WordPress Core Test Serisi nedeniyle yapılabilir.WordPress API dinlenmesini içeren WordPress testi ile ilgili bir sorun bulursanız, Core Trac’ta bir sorun açmalı ve bir yamalı göndermelisiniz.İki teste ihtiyacımız olacak.Bu bağlamda doğru olması gereken sistemimizdeki koşullu mantığı test etmek için.İkinci test, sonucun sistemimiz tarafından üretilmesi gereken sonuç olduğunu kanıtlayacaktır.Bu bizim ilk testimiz, bu bir istek gönderdi ve omuz () ‘nın doğru döndüğünü doğruladı:
Bu, tofu sisteminin sonuçları filtrelemesi gerektiğini kanıtlar. Şimdi sonuç kümesinin içeriğinin doğru olduğunu kanıtlayalım. Bu, wp_query sonuçlarını test etmeye çok benzer. Sadece doğal dinlenme dinlenmesinden üretilen doğru WordPress gönderisini gördüğümüzü kontrol ediyoruz. Sadece sistemimizin etkilerini test ediyoruz. Bu test, yapay istekler yaparak sonuncusu ile aynı başlar. Bu kez sonuçları tekrarlıyoruz ve bunları getPosts () yönteminin çıktısı ile karşılaştırıyoruz. Bu, aşağıda kullanılan yöntemle aynıdır. Aynı sonuçları üretmelidirler. Kodumuzda bir sorun varsa, bu test beklenen sonuçları WP_ERROR nesneleri veya diğer sonuç koleksiyonlarıyla karşılaştırır ve bu nedenle test başarısız olur. Bu desenle ilgili harika olan şey, GetPosts () yönteminin değiştiği ve testlere kıyasla verilerin değişmesidir. Bu test belirli verileri kontrol etmez – diğer testler bunu yapabilir. Sadece aynı verilere erişmenin iki farklı yolunun hala senkron olmasını sağlar. Küçük bir nokta gibi görünebilir. Bu testten önce, bu testi az sayıda ifade yapmak için güvenli hale getiren testler yazdık veya tanımladık ve kontrol etmediğimiz birçok sistem işlevini içeriyor. Bu son test sistemimizin son testidir. Bu nihai sonuç. Ancak bu diğer tüm testlerden farklı değildir. Her biri küçük bir şeyi kanıtlar ve diğer her testin geçmesini düşünür. Test, güvenli varsayımlarla ilgilidir. Bir test başarısız olduktan sonra, tüm varsayımlara güvenilmez.