Почему пора перестать использовать бессмысленные тестовые значения

Почему пора перестать использовать бессмысленные тестовые значения

12 мая 2022 г.

Вы когда-нибудь встречали тест, в котором фиктивные данные представляли собой набор бессмысленных «тестовых» строк и 123 целых чисел? Да, я тоже — и это отстой.


Бессмысленные тестовые значения 😿


Рассмотрим этот тест JavaScript.


```javascript


test('должен вернуть потомков родителя', () => {


// имитация некоторых данных


константа mockedParent = {


название: "тест",


возраст: 123 года,


интересы: [


"контрольная работа",


"контрольная работа",


const mockedChildren = [


название: "тест",


имя_родителя: "тест",


название: "тест",


имя_родителя: "тест",


// запускаем код


const fact = getChildrenForParent (mockedParent, mockedChildren);


ожидаемая константа = [


название: "тест",


название: "тест",


// подтверждаем результаты


ожидать(фактический).быть(ожидаемый);


Это стандартный модульный тест, состоящий из


  • Настраивать

  • Исполнение

  • Утверждение

Выглядит нормально, почему ты говоришь, что это отстой?


Если бы я нашел этот тест в кодовой базе, я бы не понял, какие данные важны для прохождения теста. Если я изменю имя родителя с "test" на "some-name" , пройдет ли тест? Я не знаю. Название теста может помочь, но, как и в случае с другой документацией, оно со временем изменится и не будет синхронизироваться с кодом.


Значимые тестовые значения 😻


Что, если мы будем использовать значимые тестовые данные, как тогда будет выглядеть наш тест?


```javascript


test('должен вернуть потомков родителя', () => {


// имитация некоторых данных


const нерелевантный возраст = 123;


константа mockedParent = {


имя: "конкретное-родительское-имя",


возраст: нерелевантный возраст,


интересы: [


"не имеющий отношения",


"не имеющий отношения",


const mockedChildren = [


имя: "ребенок-имя-1",


parentName: "конкретное-родительское-имя",


имя: "ребенок-имя-2",


parentName: "конкретное-родительское-имя",


// запускаем код


const fact = getChildrenForParent (mockedParent, mockedChildren);


ожидаемая константа = [


имя: "ребенок-имя-1",


имя: "ребенок-имя-2",


// подтверждаем результаты


ожидать(фактический).быть(ожидаемый);


Прочитав этот тест, я вижу, что "specific-parent-name" встречается как в родительском, так и в дочернем элементе и имеет префикс Specific, который говорит мне, что это значение важно для прохождения теста. С другой стороны, нерелевантные значения имеют значение "нерелевантный", что говорит мне о том, что я могу спокойно игнорировать их в этом тесте.


Для чисел и логических значений вы можете извлечь значение в константу и дать константе осмысленное имя.


⚠️ Отказ от ответственности ️


Использование строк в качестве идентификаторов — плохая практика — вместо этого используйте целые числа! Я использовал строки, чтобы иметь наглядный пример.


Вывод


  • Использование "test" и других бессмысленных значений в ваших тестах является плохой практикой, поскольку оно не передает никакого смысла. Из-за этого тест занимает больше времени для понимания и замедляет время разработки, например. когда вам нужно реорганизовать или расширить свой код

  • Вместо этого используйте осмысленные значения. Например. "конкретное-что-то" и "нерелевантный"

  • Извлечение числовых и логических значений в константы со значимым именем

Ты согласен или несогласен? Давайте обсудим это в разделе комментариев 😊


Также опубликовано здесь



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE