У своїх тестових одиницях я часто кидаю довільні значення на свій код, щоб побачити, що він робить. Наприклад, якщо я знаю, що foo(1, 2, 3)має повернутися 17, я можу написати це:
assertEqual(foo(1, 2, 3), 17)
Ці числа суто довільні і не мають ширшого значення (наприклад, це не є граничними умовами, хоча я і тестую їх). Я б намагався придумати хороші імена для цих номерів, і писати щось подібне const int TWO = 2;явно не допомагає. Чи правильно писати такі тести, або я повинен розбивати числа на константи?
В Чи всі магічні числа створені однаковими? , ми дізналися, що магічні числа в порядку, якщо значення очевидно з контексту, але в цьому випадку числа насправді взагалі не мають значення.
const int TWO = 2;навіть гірше, ніж просто використовувати 2. Це відповідає формулюванню правила з наміром порушити його дух.
foo, це нічого не означало б, і тому параметри. Але насправді, я впевнений , що функція не має це ім'я, і ці параметри не мають назви bar1, bar2і bar3. Зробіть більш реалістичний приклад, коли імена мають значення, тоді має набагато більше сенсу обговорювати, чи потрібні імена даних тестових даних.
1, 2, 3є індекси 3D-масивів, де ви раніше зберігали значення17, то я думаю, що цей тест був би дендім (доки ви також маєте негативні тести). Але якщо це результат підрахунку, ви повинні переконатися, що хтось, хто читає цей тест, зрозуміє, чомуfoo(1, 2, 3)слід17, і магічні числа, ймовірно, не досягнуть цієї мети.