[Из песочницы] SpecFlowMaster: как улучшить качество тестов

?v=1

Делаем правильные вещи


Современная разработка не может существовать без автоматизированных тестов. Тесты могут быть написаны очень быстро даже непрофессионалами. Таким образом, у нас есть тесты, все как бы хорошо. Можем ли мы довериться таким тестам? Каково качество наших инструментов для проверки качества? Давайте посмотрим на 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. Плагин можно найти на гитхаб
  2. Любые отзывы высылайте на arskiev@gmail.com

© Habrahabr.ru