spock interview questions with answers
Успішно очистіть своє інтерв’ю в Spock за допомогою цього списку запитань у Spock Interview:
У цьому Спок Підручники для всіх , ми дослідили все про Інтеграція та функціональне тестування в Spock у нашому попередньому уроці.
Цей підручник охоплюватиме найпоширеніші запитання щодо інтерв’ю в рамках Spock.
Ми також спробуємо зрозуміти методи спок-кріплення та підтримку вбудованих розширень, які роблять Spock справді потужним інструментом для багатьох типів тестування, таких як Unit, Integration та наскрізні.
Найпопулярніші запитання для інтерв’ю у Spock
Нижче наведено деякі найпоширеніші запитання для інтерв’ю у Spock із відповідями та прикладами.
Давайте досліджувати !!
Q # 1) Чи може тест Spock мати декілька блокувань, коли і потім?
Відповідь: Зазвичай рекомендується мати невеликі тести або сценарії, оскільки спроби зробити багато речей за один тест можуть мати запах коду. Сказавши це, цілком справедливо мати кілька тестів, коли і потім, у тесті. Тест вважатиметься успішним лише тоді, коли всі тодішні блоки знаходяться у стані проходження.
Погляньмо на приклад, щоб проілюструвати це:
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 }
У наведеному вище блоці коду ви можете бачити, що у нас є 2 блоки тоді і потім.
Зверніть увагу на пункти нижче:
- Блоки виконуються в порядку їх появи, тобто послідовно.
- Помилка будь-кого, який тоді блокує, призведе до невдалого тесту.
- Твердження у всіх тодішніх блоках повинні пройти, щоб загальний тест пройшов успішно.
Q # 2) Які всі методи кріплення доступні в Spock?
Відповідь: Методи фіксації схожі на зворотні виклики, які викликаються, коли спрацьовує певна подія.
Spock надав 4 тестові прилади, які спрацьовують проти різних подій:
- setupSpec - Запускається один раз перед початком виконання всього файла Spec.
- cleanupSpec - Запускається один раз, коли всі тести в даному файлі специфікації виконуються
- налаштування - Запускається один раз перед кожним випробуванням у специфікації.
- прибирати - Запускається один раз після кожного тесту у специфікації.
Давайте подивимося зразок коду для ілюстрації методів кріплення:
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****' }}
Нижче наведено результати вищезазначеного зразка коду:
що таке файл .7z?
в специфікації налаштування!
в налаштуванні!
**** тест специфікації ****
на прибиранні!
в налаштуванні!
**** тест специфікації ****
на прибиранні!
в специфікації очищення!
Як показано вище, ви можете помітити, що специфікації налаштування та очищення викликаються лише один раз для всієї специфікації, а кроки / пристрої налаштування та очищення викликаються один раз на тест.
Q # 3) Чи можна використовувати тести Spock для тестування служб, що базуються на REST?
Відповідь: Так, фреймворк Spock можна використовувати для створення E2E або тестів інтеграції для розгорнутих служб відпочинку, використовуючи загальні бібліотеки Java, такі як шаблон відпочинку і т. Д. (Крім того, зверніть увагу, що Spock також може використовуватися для запуску тестів для додатків на основі Spring boot, а також з іншими фреймворками, як Селен ).
Давайте подивимося на цьому на простому прикладі, який використовує клас RestTemplate Spring та виконує операцію отримання публічно розміщеного API і перевіряє відповідь як ненульову.
Приклад:
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 } }
У наведеному вище прикладі ви можете звернутися до специфікації Spock, яка використовується для затвердження відповіді загальнодоступного API.
Q # 4) Які обмеження має Spock?
Відповідь: Хоча крива навчання для фреймворка Spock не настільки крута, наскільки її легко вивчити, її декларативний синтаксис робить її дуже читабельною.
Тим часом можна розглянути кілька моментів:
- Для програм на кодовій базі Java використання Spock призведе до додавання нового мовного стека, тобто Groovy.
- Тести Spock працюють трохи повільніше, ніж власні тести JUnit.
- Підтримка IDE для Spock не така хороша, як для інших фреймворків, таких як JUnit.
Незважаючи на всі вищезазначені пункти, переваги Spock переважують невеликий список мінусів, які має Spock.
Q # 5) Поясніть деякі вбудовані розширення фреймворка Spock.
Відповідь: Spock пропонує безліч вбудованих розширень / гачків / тригерів, які в основному базуються на анотаціях (ми їх бачили в розділі / питанні тестових приладів).
Давайте розглянемо деякі вбудовані дискусії на прикладах:
@ Ігнорувати: Щоб запобігти виконанню функції (або окремого методу). Для того, щоб використовувати просто метод декорування (індивідуальний метод тестування) або цілу специфікацію, це гарантує, що анотований метод або клас не виконуються.
@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: Ця анотація корисна, коли ви просто хочете вибрати один та виконати решту методів даної Специфікації.
@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 }
Як видно з наведеного вище прикладу, метод, позначений @IgnoreRest, буде виконаний, а решта тестів буде проігноровано.
@IgnoreIf: Ця анотація є умовним ігноруванням.
Наприклад: Якщо ви не хочете запускати деякі тести на Mac OS, тоді ви можете використовувати комбінацію @IgnoreIf із System.getProperty (“os.name”), яка забезпечить, щоб тести запускалися лише за умови знаходження відповідної ОС .
Спробуємо зрозуміти це на наведеному нижче зразку коду:
@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 }
У наведеному вище зразку коду ми використовували анотацію @IgnoreIf із умовою на System.getProperty, яка перевірятиме значення “Mac” у значенні властивості та ігноруватиме лише у випадку успішного збігу умов.
Побачимо тут ще одне розширення, тобто @Час вийшов: Це допомагає згадати значення тайм-ауту у вибраній вами одиниці для тесту, що виконується, і якщо поріг тайм-ауту порушений, тест видасть виняток.
Ще один важливий момент, на який слід звернути увагу, це те, що анотацію @Timeout можна згадувати також у повній специфікації, і це буде поєднувати тривалість усіх окремих тестів і створювати виняток у разі порушення порогу.
@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 } }
У наведеному вище коді, якщо загальний час виконання специфікації перевищує 10 мс, то виконання сценарію не вдасться. Ви можете переглянути вихідні дані з деталями помилок на консолі помилок.
Подібно до згаданих розширень, є ще кілька вбудованих розширень, таких як:
@ Потребує: Що вимагає, щоб конкретна умова була істинною.
@Проблема: Пов’язати будь-які дефекти, пов’язані з тестовим прикладом тощо.
Ці розширення додають велику гнучкість і потужність специфікаціям Spock і надають багато контролю за виконанням тесту.
Висновок
Таким чином, ми розглянули найпопулярніші питання інтерв’ю у Spock у цьому посібнику. Крива навчання для Spock низька через те, що мова groovy відповідає декларативному стилю програмування і є дуже читабельною.
основні запитання та відповіді на співбесіду з питань технічної підтримки
Спок, хоча і відносно новий, набирає популярності як рамка вибору для написання різних видів тестів у Java або додатки на основі Groovy.
Сподіваюся, вам сподобались усі інформативні підручники у цій серії Spock. Ми справді впевнені, що ці навчальні посібники збагатили б ваші знання та розуміння Spock.
НАЗАД Підручник | ПЕРШИЙ підручник
Рекомендована література
- Написання одиничних тестів із Spock Framework
- Spock для інтеграції та функціональних випробувань із селеном
- Спок знущання та придушення (приклади з відеоуроками)
- Тестування на основі даних або параметризоване за допомогою Spock Framework
- Підручник із Spock: Тестування за допомогою Spock and Groovy
- Запитання та відповіді на інтерв’ю
- Запитання та відповіді на інтерв’ю для тестування ETL
- 20 найпопулярніших запитань та відповідей на інтерв’ю TestNG