SpecFlowMaster: як покращити якість тестів
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.
Робимо правильні речі
Сучасна розробка не може існувати без автоматизованих тестів. Тести можуть бути написані дуже швидко навіть непрофесіоналами. Отже, маємо тести, все начебто добре. Чи можемо ми покластись на такі тести? Яка якість наших інструментів перевірки якості? Давайте подивимось на SpecFlow тести, які можуть бути написані людською мовою.
Feature: SpecFlowFeature In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Scenario: Add two numbers Given I have entered 50 into the calculator And I have entered 70 into the calculator When I press add Then the result should be 120 on the screen
Цей тест складається з трьох стандартних частин, які називаються налаштування, дія та перевірка. Все виглядає дость добре. Але що відбудеться, коли хтось додасть додатковий крок в цей тест?
Feature: SpecFlowFeature In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Scenario: Add two numbers Given I have entered 50 into the calculator And I have entered 70 into the calculator When I press add And I press memorize Then the result should be 120 on the screen
Занесення в пам’ять є дуже звичайною операцією в калькуляторі аби покласти в пам’ять поточне число. Якщо ми запустимо тест, то він все ще буде зелений. Це не дуже гарний тест тепер, бо ніхто не перевіряє як новий крок в тесті впливає на всю систему.
Такий тип тестів може з’явитись в результаті великого рефакторінгу або суттєвих змін в технічне завдання. Це означає, що ми все ще будемо мати всі тести зеленими, але вони перевірять систему не достатньо добре. Тест вказаний вище може буде виправлений двома способами: видалити цей доданий крок «And I press memorize» або додати ще один крок в кінці тесту для перевірки стану пам’яті «Then value stored in memory is 120».
SpecFlowMaster плагін
Цей плагін для Specflow дозволяє знайти такі тести і підозрілі рядки тестів. Як це працює? Для кожного рядку Specflow feature він генерує спеціальний тест, який запускає той самий тест, але без цього рядка. Якщо виконання тесту призводить до помилки, то це очікувана поведінка і все добре. Якщо такий тест виконується успішно, то щось тут погано з піддослідним рядком в цьому тесті і система визначає цей рядок як підозрілий. Тобто новий згенерований тест буде червоним.
Більш складні випадки для кроків передумов (background) або сценарієв з кількома наборами даних такох перевіряються. Для кроків передумов плагін виконую всі тести у файлі, але без піддослідного кроку. Для тестів з наборами даних плагін генерує виконання тестів для усіх наборів даних.
Технічні примітки
1. C#, VB
2. SpecFlow 3.0 або вище
3. .NET Framework 4.7.1 або вище, .NET Core 2.0 або вище
Що планується зробити пізніше
1. Підтримка До (Before) та Після (After) атрибутів
2. Схожі плагіни для Java та Node.js
Посилання
1. Плагін може бути знайдений на гітхаб github.com/pavlobcn/SpecFlowMaster
2. Будь-які відгуки висилайте на [email protected]
9 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів