Java ile çalışmış olan herkes Mockito ve Hamcrest hakkında bilgi sahibidir. Bu çerçeveler, bağımlı bileşenleri izole ederek ve iddialar yazarak kodu test ederken son derece yardımcı olur, ancak okunabilirlik konusunda bize pek bir iyilik yapmazlar.
Bu yazıda, Kotlin için Java'dan ayrıldıktan sonra neden Kotest ve MockK kullanmaya karar verdiğimi tartışmak istiyorum .
Mockito ve Hamcrest kullanarak normal ve basit bir birim testinin nasıl göründüğüne bir göz atalım:
Bu snippet'te ne kullanılır:
verifyÖrneğimizin iddiasını bir cümleyle ifade edersek, gerçek koda kıyasla bir karışıklık olduğunu görürüz. Evet, bunu daha uygun bir şekilde yeniden ifade edebiliriz, ancak yerine getirilmesi gereken koşulları (
verifyve
times= yöntemimiz bir kez çağrılmalıdır) ve hedefi (
services.add) bölüyorum .
Hamcrest'in
assertThatiddiasına baktığımızda, şimdiden bir miktar iyileşme görebiliyoruz, ancak yine de mükemmel değil.
Bunu nasıl daha da geliştirebileceğimizi öğrenmek için MockK ve Kotest'e geçelim.
MockK , Mockito kullanımından bildiğimiz tüm özellikleri daha iyi okunabilirlik ve Kotlin uyumluluğu ile sunar.
Sisteminizi test altında yalıtmak için sahte nesnelerinizi oluştururken, sözdizimi açısından Mockito'dan büyük bir fark yoktur. İlginç ve ayırt edici olan kısım, saplama yanıtlarımızı nasıl tanımladığımızdır
every.
Varsayılan sahte, gelen tüm aramalar için yanıtlar belirtmenizi gerektirir. Bir çağrı varsa ancak stubbed yanıt yoksa, test başarısız olur (örn
add. Bunları açıkça yok saymak istiyorsanız, rahat bir taklit oluşturabilirsiniz.
Yöntemin saplamasının okunabilirliğine baktığımızda, büyüklüğünü görüyoruz.
Casuslarla çalışmak da aynı derecede kolaydır.
verifyayrıca şimdi çok daha temiz görünüyor. Sınıf ve yöntem birbirine bağlıdır ve beklenen çağrıların sayısı, onaylama anahtar sözcüğünün hemen yanındadır.
Benim için MockK'nın sözdizimi çok daha az “gürültüye” sahip ve anlaşılması daha kolay.
Yakalama yoluyla geçirilen argümanların doğrulanması
CapuringSlotveya aracılığıyla yapılır
MutableList. İlk seçenek, tek bir aramanın daha kolay eşleştirilmesi içindir.
Bir Kotlin geliştiricisi olarak, ayrıca Spring Boot'u kullanıyor ve MockK'nın bununla uyumluluğunu merak ediyor olma ihtimaliniz yüksek. springmock , Spring Boot'un entegrasyon testleri ile uyumluluk sağlar.
Mockito tabanlı Spring Boot sahte fasulye ile aynı işlevselliği sağlar. Sadece
@MockkBeanve kullanmaya başlayın
@SpykBean.
Not: Bu, MockK'nın özellik setinin kapsamlı olmayan bir listesidir. mockk.io'da keşfedilecek daha çok şey var . Ayrıca Oleksiy Pylypenko, MockK'nın özellikleri hakkında çok kapsamlı bir dizi yazdı .
Kotest, iddiaları basit ve temiz bir şekilde yazmamızı sağlar.
Kotest, JavaScript'in Jest'ine benzer bir sözdizimine sahip geniş bir çekirdek eşleştirici listesi getiriyor. Eşleştiriciler, bir uzantı olarak veya bir inflix işlevi olarak kullanılabilir.
Uzantı işlevleri, favori IDE'nizin otomatik tamamlama özelliğinin avantajına sahiptir. Gerçek ve beklenen değerin katı bir şekilde ayrılması nedeniyle hala inflix stilini kullanmayı tercih ediyorum.
İstisnaları ve doğrulamalarını kontrol etmek ile yapılabilir
shouldThrow. Yalnızca istisnanın atıldığını doğrulayabilir veya yakalanan istisna üzerinde ek kontroller yapabilirsiniz.
Başarısız testlerle uğraşırken hayal kırıklığına uğramamak için hataya neyin neden olduğunu hemen bilmek de gerçekten önemlidir. Kotest
withClue, iddialarınıza daha fazla ayrıntı eklemenize veya boş değerler nedeniyle kafa karıştırıcı iddia mesajlarından kaçınmanıza olanak tanıyan tanıtarak bu konuda yardımcı olur .
Kotest sadece iddialar için değil, aynı zamanda özellik testi için de bir kütüphanedir. Ayrıca, bu makalede anlatılmayan çok daha fazla özellik sunar. Kotest.io'daki belgelerine göz atmanızı şiddetle tavsiye ederim .
İlk örneğimizi güncelleyelim:
Bu sadece çok basit bir örnek olmasına rağmen şimdiden çok daha iyi görünüyor. Çok daha karmaşık saplama kurulumu ve iddiaları olan testler için, MockK ve Kotest'i kullanmak, çok uzun zaman önce yazdığınız veya başka biri tarafından yazılmış testleri ne kadar hızlı anlayabileceğiniz üzerinde daha da büyük bir etkiye sahiptir.
Testler düzenli olarak bozulacak şekilde tasarlanmıştır, bu nedenle muhtemelen istenmeyen yan etkilere neden olduğunuzu bilirsiniz - bu yüzden onları çok okuyacaksınız. MockK ve Kotest ile, Kotlin'de harika okunabilirlik ile testler yazmak için ihtiyaç duyduğunuz tüm araçları elde edersiniz.
Ve her zaman olduğu gibi, sadece benim fikrimi alma. Bugün kendiniz deneyin.
Okuduğunuz için teşekkürler.
Bir Ürün Sahibi tipik olarak meraklıdır, düşüncelerinde geniştir ve ürünleri için tutkuyla doludur. Bu nedenle 'göbek ateşi' yardımcı bir niteliktir, tıpkı liderlik etmeye, öğrenmeye ve meraklı kalmaya istekli olmak gibi… bir şeyleri bilmeye ve aynı zamanda işleri halletmeye susamış olmak gibi.
Koşullu Oluşturma nedir? React'te koşullu oluşturma, belirli bir koşula dayalı olarak bileşenleri veya öğeleri görüntülemenin bir yoludur. Normal Javascript'teki koşullarla aynı şekilde çalışır.
Giriş Bu Müşteri Yolculuğu Haritası projesi, UX Vaka Çalışmamın Analiz Bloğu'nu oluşturacak ikinci ve son bölümdür. UX Tasarım Enstitüsü'ndeki çalışmalarım sırasında süreç yönlendirildi ve geliştirildi.
VEGAN | BİTKİ BAZLI | YAĞSIZ | WFPB Tay restoranlarında taze böreklerle birlikte aldığınız fıstıklı sosu biliyor musunuz? Bu sos bir güveç haline getirilseydi, bu olurdu. Çok iyi! Bu güveç tatlı, tuzlu (veya umami) ve baharatlı (isteğe bağlı) mükemmel bir karışımdır.
Her şey bildiğiniz küçük şeylerle ilgili ;-) Cihazlarınızdaki küçük etkileşimlere hiç dikkat ettiniz mi? Telefonunuzu şarja takarken/çıkarırken aldığınız geri bildirimleri beğendiniz mi? Belki sesli asistanınızı her etkinleştirdiğinizde küçük bildirim sesi gelir? Yenile'ye her bastığınızda masaüstü simgelerinin kaybolması ve yeniden görünmesi ne olacak? Mikrodalga bittiğinde 'ding' sesi mi geliyor? Ya da tost makinenizdeki yeşilden kırmızıya dönen ışık? Bu eylemlerin çoğu, Mikro etkileşimleri hesaba katar. Eminim bu terimi çok duymuşsunuzdur ama gerçekten ne kadar büyülü olduğunu biliyor musunuz?
Apple'ın Bug Bounty programı, teoride, programcıları şirketin kodunda buldukları kusurları bildirmeye teşvik ediyor. Uygulamada? Çok değil.
'Big Brother' yıldızı Claire Rehfuss, hayranlarını spoiler hesaplarına güvenmemeleri konusunda uyarıyor.
Kody Brown, iki karısı Meri Brown ve Christine Brown'ı arkadaş bölgelendirdi. İki eşin reddedilmeyi nasıl ele aldığı tamamen farklıydı.
Kristen Stewart bir keresinde 'Pamuk Prenses' rol arkadaşı Chris Hemsworth'a sert bir yumruk attı ve bu, oyuncunun geleceğini görmediği bir saldırıydı.
GQ Magazine ile yaptığı bir röportajda BTS'den Jin, BTS ve Coldplay'in şarkısı 'My Universe'nin bir bölümünün 'son bölümü yapmadığını' açıkladı.
Her hafta güncellenen mini bulmacamız, en sevdiğimiz HowStuffWorks okumalarımızı zeki ipuçlarıyla birleştiriyor!
Doğru deterjanı seçme konusunda endişelenmenize gerek kalmadan çamaşır yıkamak yeterince kötü. Peki en iyisi hangisi? Yoksa önemli mi?
Kentucky kırsalındaki Fugates ve Combs aileleri, genetik piyangoyu kaybettiler ve her ikisi de, evlenirken tenlerinin mavi görünmesine neden olan nadir bir çekinik özelliği paylaştılar. Bunun nedeni neydi? Ve ailelere ne oldu?
İki babasız erkek civciv, California akbabasını yok olmaktan kurtarmak için bir programda yetiştiriliyor. Böyle 'bakire' doğumlar nasıl mümkün olabilir?
Vanderpump Rules yıldızı Katie Maloney-Schwartz, Perşembe günü Instagram'da yaptığı dürüst ve içten bir gönderiyle kendini sevme yolculuğunda kaydettiği ilerlemeyi anlattı.
Jessica Alba, kendisini ve çocuklarını Dolly ve Lucy adlı iki köpekle sarılıp oynarken gösteren keyifli bir videoyu Instagram hesabından paylaştı.
Geçen hafta sonu bir Porto Riko tatili sırasında nişanlanan Megan Fox ve Makineli Tüfek Kelly'den bir kaynak, "İlk görüşte aşk durumuydu" diyor.
Polise göre Devonne Marsh'ın kimliği belirlenemeyen kız arkadaşını çakmak gazıyla kaplayarak alevleri tutuşturduğu iddia edildi.