Почему пора перестать использовать бессмысленные тестовые значения
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"
и других бессмысленных значений в ваших тестах является плохой практикой, поскольку оно не передает никакого смысла. Из-за этого тест занимает больше времени для понимания и замедляет время разработки, например. когда вам нужно реорганизовать или расширить свой код
- Вместо этого используйте осмысленные значения. Например.
"конкретное-что-то"
и"нерелевантный"
- Извлечение числовых и логических значений в константы со значимым именем
Ты согласен или несогласен? Давайте обсудим это в разделе комментариев 😊
Также опубликовано здесь
Оригинал