Kimyasal & Malzeme Mühendisliği
Mühendislik için Yazı Birimi Testleri ve Sdks için En İyi Uygulamalar
Table of Contents
Birim Testleri API ve SDK'lar için Eleştireldir
Modern yazılım mühendisliğinde API ve SDK'lar dağıtılmış sistemlerin ve üçüncü taraf entegrasyonlarının arka kemiği olarak hareket eder - her işlevin, yöntemin veya uç noktasının, API'lerin ve SDKların onlarca yıllık bağımlı servislerin arasına katılabileceğinin doğru bir şekilde tanımlanmasını sağlar.
İyi hazırlanmış ünite testleri, mevcut sözleşmelerden korkmadan daha fazlasını yapar. Kısa sürede, birim testleri sağlam, kullanılabilir bir bina bloğuna nasıl hizmet eder. Geliştiriciler, mevcut sözleşmelerden korkmadan özellikleri eklerler. kısa sürede, birim testleri sağlam bir şekilde, kullanılabilir bir kara kutudan sağlam, muhafaza edilebilir bir bina bloğu haline getirir.
API ve SDK için Birim Testinin Temel Prensipleri
Belirli uygulamalara girmeden önce, temel oluşturmaya yardımcı olur. Aşağıdaki ilkeler diğer geliştiriciler tarafından tüketilecek arayüzler için etkili bir birim test stratejisine kılavuzdur.
Test in Isolation, ama Entegrasyon Hakkında Düşünmek
Birim testleri dış bağımlılık olmadan yapılmalıdır - canlı veritabanı yok, ağ aramaları yok, dosya sistemi erişim. API'ler ve SDK'lar için, bu, HTTP müşterileri, veritabanı sürücüleri ve üçüncü taraf hizmetlerinizi doğru bir şekilde onaylamayı gerektirir. ancak, izolasyon gerçek ortamı görmezden gelmez.<0Always pair tests with integration testing).
Testlerinizi Kod Olarak Tedavi Etmek
Birim testleri aynı rigor'a üretim kodu olarak ihtiyaç duyar. İyi yapılandırılmış, isimlendirme kongreleri takip etmeli ve kod incelemeleri sırasında gözden geçirilmelidir. Kötü yazılı bir test paketi, yavaşların aşağı gelişimine yönelik bir bakım yükü haline gelir.
Uygulamayı Tercih Eden Davranışları Uygulamayı Tercih Etmek
Kod ne yaptığını test edin, nasıl yapar. Örneğin, API'nin talep ettiği bir yöntemi test ederken, çıktı şeklini ve değerlerini kontrol edin - belirli bir yardımcı işlevin içsel olarak adlandırıldığını iddia etmeyin.Bu uygulama, iç uygulama ayrıntılarınızı yeniden yapılandırdığınızda testleri önler.
Yazı Birimi Testleri için En İyi Uygulama: In-Depth
Zihindeki ilkelerle, özellikle mühendislik API'leri ve SDKları için uygun olan en iyi uygulamalardır.
1. Davranışsal Birim Için Bir Assertion yazın
Ortak bir tuzak tek bir test işlevine birden çok iddiayı paketliyor. Bazı çerçeveler izin verirken, her testin doğrulanması gerekir:0) Bir test başarısız olduğunda sözleşmenin bir kısmını kırdı.
Örnek: Bir SDK yöntemi için bir kullanıcıyı ID'ye geri almak, için ayrı testler yazmak: geçerli bir kimlik, geçerli bir ödeme yükü ile 200 geri döndürür, geçersiz bir ID döndürür 404 döndürür ve eksik bir ID döndürür 400. Her testin tek, okunabilir bir adı vardır.
2. Mock Dış Hassasiyetler Hassasiyetle Bağımlılık
Mocking API ve SDK testleri için gereklidir.Speçevre gibi kütüphaneler kullanın:0)) (JavaSent:1) (Python), HTTPFLT:2)Mockito) veya OSD))))) veya DÖRDÜŞÜNCÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ
[FONT:0]Gerçekleştirilmiş verilerle (gerçekten anonimleştirilmiş verilerle anonimleştirilmiş) aynanın gerçek üretim yanıtlarını geri almak yerine, gerçek bir üretim yanıtlarını (gerçekten veri anonimleştirilmiş verilerle) kullanarak gerçekleştirilebilir.
3. Tüm Hata ve Edge Vakalarını Kapağı
API ve SDK'lar sadece başarı değil, aynı zamanda geniş bir dizi başarısızlıkla başa çıkmamalıdır: ağ zamanı, malform JSON, kimlik doğrulama hataları, oran limitli ve beklenmedik HTTP durum kodları. Her kamu yöntemi veya uç noktası için API'niz tarafından belgelenen her hata senaryosu için bir test yazın: Commonly kaçırılmış kenar vakalarınız şunları içerir:
- Boş veya null giriş parametreleri
- Çok büyük maaş yükleri (çalışıcı test)
- dizelerde özel karakterler (SQL enjeksiyonu girişimleri, unicode)
- Yarış koşullarına neden olabilecek aynı anda talepleri
SDK'lar için, aynı zamanda paginasyon mantığını test edin, yeniden deneme mekanizmaları ve geri çekilme davranışı. Güçlü bir test paketi, SDK'nızın mükemmel bir şekilde başarısız olmadan doğru sayıda kez tekrarladığını ve doğru bir şekilde onaylayacağınızı doğrulayacaktır.
4. Testlerin Tamamen Bağımsız Olduğunu Sağlayın
Test bağımlısı - bir test başka bir yerden ayrıldığı durumda - büyük bir flakiness kaynağıdır. API/SDK testinde, bu genellikle testlerin alaycı bir sunucu veya statik konfigürasyonu paylaştığında görünür.UseENFLT:0) testler[DQT:0) her test için taze bir ortam yaratmak için.
Test bağımsızlığı da testlerin herhangi bir sırayla çalıştırılabilir. CI boru hattınızı gizli bağımlılıkları yakalamak için periyodik olarak test siparişini yapılandırın.
5. Robust CI Entegrasyonu ile Automate Execution
Birim testleri her iş başında çalışırken en değerlidir. Test koşucunuzu CI/CD sisteminizle bütünleştirin.Vizyonlar ve SDK'larda çıktı üreten test muhabirleri kullanın.Testler için kod kapsamı için bağlantı kurun - ancak eller) kendi başına bir hedef olarak kapsamaz.
Güçlü bir şekilde CI'de sağlık kontrolleri [Döneticileri) kullanmayı düşünün: tam süitten önce kritik bir birim testlerinin alt kümesini çalıştırın. “mutlu yol” testleri başarısız olursa, geliştiricilere hızlı bir geri bildirim sağlamak için erkenden.
API & için Gelişmiş Stratejiler; SDK Unit Testi
Temellerin ötesinde, testinizi sadece olağanüstü için yeterli olan teknikler vardır.
Unit Testleri ile Sözleşme Testi
Mikro hizmet ekosisteminde API'ler genellikle önceden tanımlanmış sözleşmelere sahiptir (OpenAPI, GraphQL şema, gRPC proto dosyalarına karşı cevap veren birim testlerine karşı yapılan cevapları doğrulayan bir araç kullanır. Örneğin, tüketicilere ulaşmadan önce bir araç kullanın.
Test Kalitesi için Mutasyon Testi
Mutasyon testi, kodlarınıza küçük hataları (mutantlar) tanıtıyor ve testleriniz onları tespit ederse kontrol ediyor. Tools likeETHFLT:0)Mutmut) veya mutant hayatta kalmaları durumunda, testleriniz bu özel davranışı tamamen doğrulamıyor.For APIs, ortak mutasyonlar HTTP durumu kodları içeriyor veya giriş doğrulama durumu operatörleri, giriş doğrulama durumu.If a mutant hayatta kalır veya giriş doğrulama.If a mutantlar, you know your testing are not completely verifying that specific behavior.
Kominatorial Coverage için Parametreli Testler
Birçok API uç noktası, her kombinasyon için manuel test vakalarını yazmak yerine, bir e-posta gönderirken parametreli testleri (pitestin 03: 7), JUnit'sDANFLT:8), Jest'sENFLT:9) Bu, kapsamazken birkaç giriş test vakasını test etmenizi sağlar.For an email, parametreleme yöntemi için geçerli e-postalar, doğrulama biçimleri ve boş dizeleri test eder.
API /SDK Birim Testlerinde Sık sık sık göz ardı edilen Alanlar
Deneyimli takımlar bile önemli yönleri kaçırabilir. İşte özel dikkatleri hak eden birkaç kişi.
Yapılama ve Çevre Değişkenleri Test Etmek
API ve SDK'lar genellikle çevre değişkenlerine veya konfigürasyon dosyalarına (örneğin, API anahtarları, temel URL'ler, zamanlayıcı değerler) kodunuzu doğru doğru bir şekilde doğrulayan ve bu yapılandırmaları doğrulayan birim testleri yazmalıdır. Test vakaları eksik değişkenleri, boş değerleri, kötü URL'leri içermelidir ve sıra dışı zaman aralıkları içerir.Bu özellikle bilinmeyen ortamlarda yüklenecek olan SDK'lar için önemlidir.
Asynchronous Davranışı ve Zamanları Test Etmek
Birçok modern API'ler, aminkron işlemleri kullanır: webhooks, uzun zamandır apolling veya akış yanıtları. Bu kalıpların test edilmesi, bir süre içinde iptal edilen isteklere karşı dikkatli bir şekilde müdahale gerektirir ve “FakeTimer’daki C#’deki araçları, veya “FakeTimers()’in JavaScript'te zamanout ve yarış koşullarını simüle etmesi için dikkatli bir şekilde kullanması gerekir.
Idempotency ve Retry Mantıkını Test Etmek
idempotency anahtarlarını destekleyen API'ler özel dikkatlere ihtiyaç duyar. Aynı idempotency anahtarı ile aynı isteği iki kez gönderen birim testleri yazın ve ikinci çağrının tekrar tekrar tekrar performans göstermeden aynı sonucu geri döndürür.
Pitfalls Kaçmak
Ne yapmamanın en iyi uygulamaları bilmek kadar önemlidir.
- [FONT=0]Avoid testing the framework.[[Dönetici:0)Avoid testing the framework.[[Dönetici:0))[Dönetici: Özel mantıkınıza odaklanın.
- [FONT:0]Bir el bombası atılır.[2] Bir alayın uygulanması çok sıkıca çiftleşirse (örneğin belirli bir SQL sorgu dizesi), test, her seferinde sınıra rektör olarak kırılır ve sonuç üzerinde tartışırsınız.
- [FONT:0]Bir dev “grasyon-indisguise” ünitesi testleri ) Eğer birim testiniz bir HTTP-memory veritabanını döndürürse, gerçek aramalar yapar veya çalışan bir sunucuya bağlıdır, bir birim test paketine taşınır.
- [FONT=0]Test kodu füzyonu [DFLT:1] Ortak kurulum mantığını yardımcı fonksiyonlar veya temel sınıflara dönüştürür. DRY prensibi de testlere uygulanır.
Test-Friendly API / SDK Tasarım
Projenizin mimarisi doğrudan test etmek için ne kadar kolay olduğunu etkiler. API ve SDK'nızı başlangıçtan itibaren test edilebilirlik ile tasarlayın.
- [[DÜDÜ:0) Bağımlılık enjeksiyonu kullanın.[DÜT:1), zor HTTP müşterileri veya veritabanı bağlantıları yerine, onları (veya yapılandırılabilir bir varsayılan varsayılan sağlar).Bu, önemsiz hale getirir.
- [FONT:0) I/O'dan iş mantığına uygun olarak; Ağa dokunmayan işlevlerin saf veri dönüşümü. Bunlar, birim testine dokunmak için en kolay.
- [FONT:0]Provide test hizmetleri.[[Dönetici:0) Test yardımcıları ile ilgili olarak, makinelerinizi, fabrika işlevlerini veya temel arayüzlerin sahte uygulamalarını size teşekkür edecek ve kendi test paketiniz daha temiz olacaktır.
- [FONT:0)Document test beklentileri.[[DÜDÜT:1] API docs'lerinizde, hata vakaları için kesin davranışı belirt, oran limitleri ve durum kodları. Bu çiftleri test paketiniz için bir kontrol listesi olarak gösterir.
Örnek: Bir SDK Yöntemi End-to-Bitiş
Örnek olarak, yukarıdaki uygulamaları takip eden basitleştirilmiş bir birim testleri set: APIT isteği haline getiren bir Python SDK methoduFLT:10.
[FONT:0)Test 1: Başarılı yaratım siparişi döndürür
) HTTP müşterisini JSON vücutİLETİŞİM: 12. CallurFLT:13) ile döndürür ve döndürür.
[FONT:0)Test 2: Invalid girişi özel bir istisna döndürür[DÜT:1][D:2) CallurFLT:15) eksik alanlarda eksik olan alanlardan dolayı.Öyle ki, bir descriptive mesajı ile, [[Dönetici|DÜye Olmayanlar İçindekiler[DÜye Olmayanlar İçin Tıklayınız.
[FONT:0]Test 3: Network timeout, iki kez tekrar denemeyi tetikliyor
) Mock HTTP müşterisini ilk iki çağrıda bir süre boyunca istisna yükseltmek için, sonra da üçüncü kez başarılı oldu ve sonunda siparişi geri döndü.
Her test bağımsızdır, sadece dış HTTP sınırı alay eder ve belirli bir davranışı doğrular.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Mühendislik API'leri ve SDK'ları için bir birim testi istenmiyor - güçlü bir CI boru hattı ve diğer geliştiricilerin güvendiği güvenilir bir ürün sunmanın ayrılmaz bir parçasıdır. - Bu, tüketicilerinizi regresyonlardan ve kendinizi gece geç saatler boyunca silme seanslarından koruyacaktır.
Daha fazla okuma için, danışmanlık:0)Martin Fowler birim testlerine () ve [[Dönetici dokümanı ) temel kavramlar için) için, API'ye özel test stratejileri için, [[FONTD|D|D|Dönetici|projektif|projektif testleri için, [[Döneticilerinizi tamamlamak için.