spock interview questions with answers
Bu Spock Mülakat Soruları listesiyle Spock Mülakatınızı Başarıyla Temizleyin:
Bunda Herkes için Spock Eğitimleri hakkında her şeyi keşfettik Spock'ta Entegrasyon ve Fonksiyonel Test önceki eğitimimizde.
Bu eğitim, Spock çerçevesi hakkında en sık sorulan mülakat sorularını kapsayacaktır.
Spock'u Birim, Entegrasyon ve uçtan uca gibi birçok test türü için gerçekten güçlü bir araç haline getiren Spock fikstür yöntemlerini ve yerleşik uzantı desteğini de anlamaya çalışacağız.
herhangi bir siteden video indirme yazılımı
En Popüler Spock Mülakat Soruları
Aşağıda, cevaplar ve örneklerle birlikte en sık sorulan Spock Mülakat Sorularından bazıları listelenmiştir.
Hadi keşfedelim!!
S # 1) Bir Spock testinde birden fazla zaman ve sonra blok olabilir mi?
Cevap: Tek bir testte birçok şeyi yapmaya çalışmak bir kod kokusu olabileceğinden, genellikle küçük testler veya senaryolar olması önerilir. Bunu söyledikten sonra, bir testte birden fazla ne zaman ve sonra engelleme olması tamamen geçerlidir. Test, yalnızca tüm bloklar geçme durumunda olduğunda başarılı olarak kabul edilecektir.
Bunu açıklamak için bir örnek görelim:
def 'illustrate multiple when and then blocks'() { given: def input1 = 50 def input2 = 100 def result when: result = input1 + input2 then: result == 150 when: result = input2 - input1 then: result == 50 }
Yukarıdaki kod bloğunda 2 tane ne zaman ve sonra bloke ettiğimizi görebilirsiniz.
Lütfen aşağıdaki noktalara dikkat edin:
- Bloklar görünüm sırasına göre, yani sırayla yürütülür.
- Herhangi birinin daha sonra engelleme hatası, testin başarısız olmasına yol açacaktır.
- Genel testin başarılı olması için tüm bloklardaki iddiaların geçmesi gerekir.
S # 2) Spock'ta hangi fikstür yöntemleri mevcuttur?
Cevap: Fikstür yöntemleri, belirli bir olay kancası tetiklendiğinde çağrılan geri çağırmalar gibidir.
Spock, farklı olaylara karşı tetiklenen 4 test fikstürü sağladı:
- setupSpec - Tüm Spec dosyası yürütme başlamadan önce bir kez çalışır.
- cleanupSpec - Verilen Spec dosyasındaki tüm testler yürütüldüğünde bir kez çalışır
- kurulum - Spesifikasyondaki her testten önce bir kez çalışır.
- Temizlemek - Spesifikasyondaki her testten sonra bir kez çalışır.
Fikstür yöntemlerini açıklamak için bir kod örneği görelim:
class TestFixtureSpec extends Specification { def setupSpec() { println 'in setup spec!' } def cleanupSpec() { println 'in cleanup spec!' } def setup() { println 'in setup!' } def cleanup() { println 'in cleanup!' } def 'test spec1'() { given: println '****test spec1****' } def 'test spec2'() { given: println '****test spec2****' }}
Yukarıdaki kod örneğinin çıktısı aşağıdadır:
kurulum spesifikasyonunda!
kurulumda!
**** test özelliği1 ****
temizlikte!
kurulumda!
**** test özelliği2 ****
temizlikte!
temizleme spesifikasyonunda!
Yukarıda gösterildiği gibi, kurulum ve temizleme spesifikasyonunun tüm spesifikasyon için yalnızca bir kez çağrıldığını ve kurulum ve temizleme adımlarının / fikstürlerinin test başına bir kez çağrıldığını fark edebilirsiniz.
S # 3) REST tabanlı hizmetleri test etmek için Spock testleri kullanılabilir mi?
sdlc'de uygulama aşaması nedir?
Cevap: Evet, Spock çerçevesi, Rest şablonu vb. Gibi yaygın Java kitaplıklarını kullanarak konuşlandırılan dinlenme hizmetleri için E2E veya entegrasyon testleri oluşturmak için kullanılabilir (Ayrıca, Spock'ın ayrıca Spring önyükleme tabanlı uygulamalar için testler çalıştırmak için de kullanılabileceğini lütfen unutmayın. gibi diğer çerçevelerle Selenyum ).
Bunu, Spring’in RestTemplate sınıfını kullanan ve genel olarak barındırılan bir API üzerinde bir alma işlemi gerçekleştiren ve yanıtın boş olmadığını kontrol eden basit bir örnekle görelim.
Misal:
class RestApiIntegrationSpec extends Specification { def 'check rest api status'() { when: 'a rest call is performed to the status page' RestTemplate restTemplate = new RestTemplate() String response = restTemplate.getForObject('https://httpbin.org/get', String.class) then: response != null } }
Yukarıdaki örnekte, genel bir API'nin yanıtını belirtmek için kullanılan Spock spesifikasyonuna başvurabilirsiniz.
S # 4) Spock çerçevesinin sınırlamaları nelerdir?
Cevap: Spock çerçevesi için öğrenme eğrisi, öğrenmesi kolay olduğu kadar dik olmasa da, bildirimsel sözdizimi onu oldukça okunabilir kılar.
Bu arada, dikkate alınabilecek birkaç nokta var:
- Java kod tabanındaki uygulamalar için Spock kullanımı, Groovy gibi yeni bir dil yığını eklenmesiyle sonuçlanacaktır.
- Spock testleri, yerel JUnit testlerinden biraz daha yavaş çalışır.
- Spock için IDE desteği, JUnit gibi diğer çerçeveler kadar iyi değildir.
Yukarıdaki tüm noktalara rağmen, yine de, Spock çerçevesinin avantajları, Spock'ın sahip olduğu küçük eksiler listesinden ağır basmaktadır.
S # 5) Spock çerçevesinin bazı yerleşik uzantılarını açıklayın.
Cevap: Spock, çoğunlukla açıklama temelli birçok yerleşik uzantı / kanca / tetikleyici sağlar (Bunlardan birkaçını test fikstürleri bölümünde / sorusunda gördük).
Örneklerle birlikte bazı yerleşik tartışmaları görelim:
@Aldırmamak: Bir özelliğin (veya tek bir yöntemin) yürütülmesini önlemek için. Basitçe decorate yöntemini (bireysel test yöntemi) veya tüm bir özelliği kullanmak için, bu, açıklamalı yöntemin veya sınıfın çalıştırılmamasını sağlayacaktır.
@Ignore def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
@IgnoreRest: Bu açıklama, yalnızca birini seçmek ve verilen Spesifikasyonun geri kalan yöntemlerini yürütmek istediğinizde kullanışlıdır.
@IgnoreRest def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 } def 'check addition of 2 numbers'() { given: int input1 = 10 int input2 = 25 expect: input1.getClass().toString() == 'class java.lang.Integer' input2.getClass().toString() == 'class java.lang.Integer' input1 = Integer.MIN_VALUE when: int result = input1 + input2 then: result == 35 }
Yukarıdaki örnekte görüldüğü gibi, @IgnoreRest ile açıklanmış yöntem çalıştırılacak ve testlerin geri kalanı yok sayılacaktır.
@IgnoreIf: Bu açıklama, koşullu bir görmezden gelmedir.
Örneğin: Mac OS'de bazı testler çalıştırmak istemiyorsanız, @IgnoreIf ile System.getProperty ('os.name') kombinasyonunu kullanabilirsiniz; bu, testlerin yalnızca eşleşen işletim sistemi bulunduğunda çalıştırılmasını sağlar. .
Bunu aşağıdaki kod örneğiyle anlamaya çalışalım:
@IgnoreIf({ System.getProperty('os.name').contains('Mac') }) def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello world' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
Yukarıdaki kod örneğinde, System.getProperty üzerinde bir koşulla birlikte @IgnoreIf ek açıklamasını kullandık, bu özellik değerinde 'Mac' olup olmadığını kontrol edecek ve yalnızca koşul eşleşmesi başarılı olursa yok sayacaktır.
Burada bir uzantı daha görelim, yani @Zaman aşımı: Bu, yürütme altındaki test için seçtiğiniz birimde bir zaman aşımı değerinden bahsetmeye yardımcı olur ve zaman aşımı eşiği aşılırsa, test bir istisna atar.
Burada dikkat edilmesi gereken bir diğer önemli nokta da @Timeout ek açıklamasının tam spesifikasyonda bahsedilebilir ve bu, tüm bireysel testlerin süresini birleştirecek ve eşik ihlali durumunda bir istisna atacaktır.
@Timeout(value=10, unit= TimeUnit.MILLISECONDS) class SampleSpec extends Specification { def 'check case-insensitive equality of 2 strings'() { //test1 } def 'check addition of 2 numbers'() { //test2 } }
Yukarıdaki kodda, spesifikasyonun toplam yürütme süresi 10 ms'yi aşarsa, senaryo yürütme başarısız olur. Hata konsolunda hata ayrıntılarını içeren çıktıyı görebilirsiniz.
Yukarıda belirtilen uzantılara benzer şekilde, birkaç başka yerleşik uzantı da vardır:
öncelik kuyruğu c ++ uygula
@ Gereksinimler: Doğru olması için belirli bir koşul gerektirir.
@Sorun: Test senaryosu vb. İle ilgili tüm kusurları ilişkilendirmek için
Bu uzantılar, Spock spesifikasyonlarına çok fazla esneklik ve güç katar ve test yürütme için çok fazla kontrol sağlar.
Sonuç
Bu nedenle, bu eğitimde en popüler Spock Mülakat Sorularını burada ele aldık. Spock için öğrenme eğrisi, mükemmel dilin bildirimsel bir programlama stilini takip etmesi ve oldukça okunabilir olması nedeniyle düşüktür.
Nispeten yeni olmasına rağmen, Spock, farklı türde testler yazmak için bir seçim çerçevesi olarak popülerlik kazanıyor. Java veya Groovy tabanlı uygulamalar.
Umarım bu Spock Serisindeki tüm bilgilendirici eğitimlerden keyif almışsınızdır. Bu eğitimlerin bilginizi ve Spock anlayışınızı zenginleştireceğinden gerçekten eminiz.
Önerilen Kaynaklar
- Spock Framework ile Birim Testleri Yazma
- Selenyum ile Entegrasyon ve Fonksiyonel Test İçin Spock
- Spock Mocking ve Stubbing (Video Eğitimleri ile Örnekler)
- Spock Framework ile Veriye Dayalı veya Parametreli Test
- Spock Eğitimi: Spock ve Groovy ile Test Etme
- Mülakat Soruları ve Cevapları
- ETL Test Mülakat Soruları ve Cevapları
- En Popüler 20 TestNG Mülakat Soruları ve Cevapları