spock interview questions with answers
Wyczyść swój wywiad Spock Pomyślnie, korzystając z listy pytań do wywiadu Spocka:
W tym Poradniki Spocka dla wszystkich , zbadaliśmy wszystko Integracja i testy funkcjonalne w Spocku w naszym poprzednim samouczku.
Ten samouczek obejmuje najczęściej zadawane pytania podczas rozmowy kwalifikacyjnej dotyczące frameworka Spocka.
Spróbujemy również zrozumieć metody ustalania Spocka i obsługę wbudowanych rozszerzeń, dzięki czemu Spock jest naprawdę potężnym narzędziem do wielu typów testów, takich jak Jednostka, Integracja i od początku do końca.
najlepsze oprogramowanie do optymalizacji systemu Windows 10
Najpopularniejsze pytania do wywiadów Spocka
Poniżej wymienione są niektóre z najczęściej zadawanych pytań do wywiadu Spocka wraz z odpowiedziami i przykładami.
Odkryjmy!!
P # 1) Czy test Spocka może mieć wiele bloków kiedy, a następnie?
Odpowiedź: Generalnie zaleca się wykonywanie małych testów lub scenariuszy, ponieważ próba wykonania wielu czynności w jednym teście może być przyczyną zapachu kodu. Powiedziawszy to, bardzo ważne jest, aby w teście mieć wiele bloków „kiedy”, a następnie. Test zostanie uznany za pomyślny tylko wtedy, gdy wszystkie następnie bloki będą w stanie pozytywnym.
Zobaczmy przykład ilustrujący to:
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 }
W powyższym bloku kodu widać, że mamy 2 bloki kiedy i potem.
Zwróć uwagę na poniższe punkty:
- Bloki są wykonywane w kolejności ich pojawiania się, czyli sekwencyjnie.
- Niepowodzenie kogoś, kto następnie zablokuje, spowoduje niepowodzenie testu.
- Aby cały test zakończył się pomyślnie, potwierdzenia we wszystkich blokach then powinny przejść pomyślnie.
P # 2) Jakie wszystkie metody ustalania są dostępne w Spocku?
Odpowiedź: Metody urządzeń są podobne do wywołań zwrotnych, które są wywoływane po wyzwoleniu określonego zdarzenia.
Spock dostarczył 4 urządzenia testowe, które są uruchamiane na różne zdarzenia:
- setupSpec - Uruchamia się raz przed rozpoczęciem wykonywania całego pliku Spec.
- cleanupSpec - Uruchamia się raz, gdy wykonywane są wszystkie testy w danym pliku Spec
- Ustawiać - Uruchamiany raz przed każdym testem w specyfikacji.
- sprzątać - Uruchamiany raz po każdym teście w specyfikacji.
Zobaczmy przykładowy kod ilustrujący metody mocowania:
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****' }}
Poniżej znajduje się wynik powyższego przykładu kodu:
w specyfikacji konfiguracji!
w konfiguracji!
**** test spec1 ****
w sprzątaniu!
w konfiguracji!
**** test spec2 ****
w sprzątaniu!
w specyfikacji czyszczenia!
Jak pokazano powyżej, możesz zauważyć, że specyfikacja konfiguracji i czyszczenia jest wywoływana tylko raz dla całej specyfikacji, a kroki / urządzenia konfiguracji i czyszczenia są wywoływane raz na test.
Pytanie 3) Czy testy Spock mogą być używane do testowania usług opartych na REST?
Odpowiedź: Tak, frameworku Spock można używać do tworzenia testów E2E lub testów integracji dla wdrożonych usług odpoczynku przy użyciu typowych bibliotek Java, takich jak szablon Rest itp. (Należy również pamiętać, że Spock może być również używany do uruchamiania testów aplikacji opartych na rozruchu Springa z innymi frameworkami, takimi jak Selen ).
Zobaczmy to na prostym przykładzie, który wykorzystuje klasę RestTemplate Springa i wykonuje operację get na publicznym hostowanym interfejsie API i sprawdza, czy odpowiedź ma wartość inną niż null.
Przykład:
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 } }
W powyższym przykładzie możesz odwołać się do specyfikacji Spock, która jest używana do potwierdzenia odpowiedzi publicznego API.
Q # 4) Jakie są ograniczenia frameworka Spock?
Odpowiedź: Chociaż krzywa uczenia się frameworku Spock nie jest tak stroma, jak łatwo się jej nauczyć, jego deklaratywna składnia sprawia, że jest on bardzo czytelny.
Tymczasem należy wziąć pod uwagę kilka punktów:
- W przypadku aplikacji w kodzie Java, użycie Spocka spowoduje dodanie nowego stosu językowego, tj. Groovy.
- Testy Spock działają nieco wolniej niż natywne testy JUnit.
- Wsparcie IDE dla Spocka nie jest tak dobre, jak dla innych frameworków, takich jak JUnit.
Pomimo wszystkich powyższych punktów, nadal zalety frameworka Spock przeważają nad małą listą wad, które ma Spock.
Q # 5) Wyjaśnij niektóre z wbudowanych rozszerzeń frameworka Spock.
Odpowiedź: Spock dostarcza wiele wbudowanych rozszerzeń / zaczepów / wyzwalaczy, które są w większości oparte na adnotacjach (widzieliśmy kilka z nich w sekcji / pytaniu o urządzeniach testowych).
Zobaczmy część wbudowanej dyskusji z przykładami:
@Ignorować: Aby zapobiec wykonaniu funkcji (lub indywidualnej metody). Aby użyć prostej metody dekorowania (indywidualnej metody testowej) lub całej specyfikacji, zapewni to, że metoda lub klasa z adnotacjami nie zostanie wykonana.
@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: Ta adnotacja jest przydatna, gdy chcesz tylko wybrać jedną i wykonać pozostałe metody danej specyfikacji.
@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 }
Jak widać w powyższym przykładzie, metoda z adnotacją @IgnoreRest zostanie wykonana, a pozostałe testy zostaną zignorowane.
@IgnoreIf: Ta adnotacja jest warunkowym ignorowaniem.
datastage pytania do wywiadów i odpowiedzi dla doświadczonych
Na przykład: Jeśli nie chcesz uruchamiać niektórych testów w systemie Mac OS, możesz użyć kombinacji @IgnoreIf z System.getProperty („os.name”), co zapewni, że testy zostaną uruchomione tylko wtedy, gdy zostanie znaleziony odpowiedni system operacyjny .
Spróbujmy to zrozumieć na poniższym przykładzie kodu:
@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 }
W powyższym przykładzie kodu użyliśmy adnotacji @IgnoreIf z warunkiem w System.getProperty, który sprawdzi „Mac” w wartości właściwości i zignoruje tylko wtedy, gdy spełnienie warunku zakończy się pomyślnie.
Zobaczmy jeszcze jedno rozszerzenie, tj. @Koniec czasu: Pomaga to wspomnieć o wartości limitu czasu w wybranej jednostce dla wykonywanego testu, a jeśli próg limitu czasu zostanie przekroczony, test zgłosi wyjątek.
Inną ważną kwestią, na którą należy zwrócić uwagę, jest to, że adnotację @Timeout można również wspomnieć w całej specyfikacji, co połączy czas trwania wszystkich poszczególnych testów i zgłosi wyjątek w przypadku przekroczenia progu.
@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 } }
W powyższym kodzie, jeśli całkowity czas wykonania specyfikacji przekracza 10 ms, wykonanie scenariusza zakończy się niepowodzeniem. Możesz zobaczyć dane wyjściowe ze szczegółami błędu w konsoli błędów.
Podobnie jak w przypadku wyżej wymienionych rozszerzeń, istnieje kilka innych wbudowanych rozszerzeń, takich jak:
@Requires: Co wymaga spełnienia określonego warunku.
@Kwestia: Aby połączyć wszelkie defekty związane z przypadkiem testowym itp.
Te rozszerzenia dodają dużo elastyczności i mocy do specyfikacji Spock i dają dużą kontrolę nad wykonywaniem testów.
Wniosek
Dlatego w tym samouczku omówiliśmy najpopularniejsze pytania do wywiadów Spocka. Krzywa uczenia się dla Spocka jest niska ze względu na fakt, że język groovy jest zgodny z deklaratywnym stylem programowania i jest bardzo czytelny.
Chociaż Spock jest stosunkowo nowy, zyskuje popularność jako platforma do pisania różnego rodzaju testów w Jawa lub aplikacje oparte na Groovy.
Mam nadzieję, że podobały Ci się wszystkie pouczające samouczki z tej serii Spocka. Jesteśmy rzeczywiście pewni, że te samouczki wzbogaciłyby twoją wiedzę i zrozumienie Spocka.
POPRZEDNIA samouczek | PIERWSZY samouczek
rekomendowane lektury
- Pisanie testów jednostkowych w Spock Framework
- Spock do integracji i testowania funkcjonalnego z selenem
- Spock Mocking and Stubbing (przykłady z samouczkami wideo)
- Testowanie oparte na danych lub parametryzowane za pomocą Spock Framework
- Samouczek Spocka: Testowanie ze Spockiem i Groovym
- Pytania i odpowiedzi do wywiadu
- ETL Pytania i odpowiedzi podczas rozmowy kwalifikacyjnej testującej
- 20 najpopularniejszych pytań i odpowiedzi do wywiadów TestNG