Чи вважається "поганою практикою" перевіряти вміст / кодування файлу в одиничних тестах?


84

Трохи контексту: раніше мені довелося оновити деякий код SQL, який надав інший мій колега, і оскільки це досить великий сценарій, він зберігається як окремий файл (який потім читається та виконується під час виконання). Роблячи це, я випадково знову ввів два помилки, які у нас були кілька місяців тому, а саме:

  • З будь-якої причини файл ASCII був закодований в UTF-16 (колега надіслав мені файл, який, можливо, спричинив його).
  • У скрипті були відсутні початкові SETзаяви (необхідні через деякі речі драйверів на виробництві, але не на чистій установці локально).

Після налагодження цього протягом години (знову) я вирішив написати кілька тестових одиниць, щоб переконатися, що це більше ніколи не повториться (і включити швидкий спосіб виправити це у повідомленні про твердження, щоб забезпечити просте виправлення майбутнім розробникам).

Однак, коли я натиснув цей код, до мене підходить інший колега (який також є керівником нашої команди) і сказав мені, що я більше не повинен робити це, тому що:

"Ці речі не належать до одиничних тестів"

"Одиничні тести повинні використовуватися лише для перевірки потоку вашого коду"

Зараз я досить конфліктний, оскільки я все ще думаю, що те, що я роблю, не помиляється, оскільки ця помилка не буде повторно введена в майбутньому, однак цей колега працює як старший і в кінці дня має вирішити, що ми витрачаємо свій час на. Що я повинен зробити? Я помиляюся, що роблю це так? Чи вважається це поганою практикою?



35
" Одиничні тести слід використовувати лише для перевірки потоку вашого коду ", я б сказав, що це фігня. Традиційно вони повинні включати всі тести, необхідні для того, щоб "одиниця", що розглядається ізольовано, була правильною. Якщо ви пишете лише ті одиничні тести, які корисні для «перевірки потоку», що б це не означало, я сподіваюся, що у вас також є окремі великі набори тестування (написані відділом QA?).
gbr

8
Проблема вашого колеги в будь-якому випадку, ймовірно, саме там, де ви склали ці тести. Я б зосередився на цьому, залишивши осторонь дискусії про конфесії / святі війни. Можливо, що ці тести занадто повільні для набору, до якого ви додали їх, але також цілком можливо, що ваш колега просто зациклений на своєму уявленні про одиничні тести і створює проблему з неіснуючої проблеми; тому краще спочатку з’ясувати, яка реальна проблема.
gbr

2
До речі, ці тести схожі на те, що ви хочете запускати щоразу, коли ви змінюєте цей файл SQL. Тут основною проблемою можуть бути інструменти тестування, які можуть не підтримувати режим роботи "лише за умови модифікованого"; це може спричинити реальні, конкретні проблеми, можливо, варто включити функцію "лише в разі модифікованих" вручну з деяким хитом саме для цих конкретних тестів.
gbr

5
Замість того, щоб перевірити, що файл має правильний вміст і кодування, чому б не перевірити, що він працює ?
іммібіс

Відповіді:


156

Швидше за все, написані вами тести ближче до інтеграційних чи регресійних тестів, ніж одиничні тести. Хоча рядок може бути дуже нечітким і іноді перетворюється на педантичність щодо того, що є чи не є одиничним тестом, я б повернувся до вашого колеги і запитав, де повинні бути тести, які ви написали, оскільки вони додають значення, що забезпечує правильність коду.

Я не хотів би зосередитися на тому, що є чи не є одиничним тестом, і розумію, що навіть якщо його тест на інтеграцію, тест все ще може мати значення.


Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
Томас Оуенс

36

Технічно це не одиничний тест, а більше крок перевірки. Правильний підхід дійсно залежить від того, яким повинен бути ваш робочий процес. Ваша команда є правильною щодо того, яка мета одиничних тестів. Я відчуваю, що це випадок використання неправильного інструменту для роботи, яку ще потрібно виконати. Тож почніть з цього:

Яку проблему я намагаюся вирішити?

За описом потрібно перевірити, чи будь-які сценарії бази даних відповідають деяким стандартам.

Які інструменти / процеси доступні для вирішення проблеми?

Якість вихідного коду зазвичай перевіряється інструментами статичного аналізу . Якщо у вас немає інструменту статичного аналізу для перевірки вашого SQL, ви можете створити швидкий і брудний інструмент, який здійснює перевірку будь-якого переданого в нього файлу SQL. Не завадить перевірити, чи є інструменти статичного аналізу, які можуть вирішити проблеми, про які ви говорите.

Якщо ви зробите таку частину інфраструктури побудови, як, наприклад, включення її до Дженкінса або щось подібне, вона може бути застосована до всіх файлів SQL у вашому проекті.

Одиничні тести вирішують проблему лише для вашого поточного файлу.

Як я повідомляю про потребу в інструменті?

Це досить просто, ви розмовляєте зі своїм керівником команди. Він може співпрацювати з власником продукту і з вами, щоб визначити ризик / винагороду від вкладення в інструментарій. Якщо це, ймовірно, одноразова проблема, то інструментарій, ймовірно, буде зайвим. Якщо інструмент для вирішення найбільших проблем є простим, можливо, це варто лише перевірити обгрунтованість.

У керівника вашої команди можуть бути деякі ідеї, які ви (або я) не розглядали, які можуть вирішити проблему більш коректно.


21
Обговорюючи вартість та ризик, важливо зазначити, що це вже спричинило втрачений час через повторне введення попередньо вирішених помилок. Це одне є вагомим аргументом для автоматизації перевірки. +1
jpmc26

1
@ jpmc26, я повністю згоден. Обговорення має розпочатися з того, що ви втратили скільки-небудь годин, з'ясовуючи, що не так, і ваші одиничні тести були вашою першою спробою запобігти втраті решти команди стільки ж часу. Однак, робота з керівництвом команди, яка має відповідати керівництву та зацікавленим сторонам, зазвичай дуже цінується. Як керівник команди, я хочу мати можливість захищати інструменти / практики / код, якими ми керуємо. Якби я побачив одиничні тести, за якими не можна було простежити фактичні вимоги, я також був би стурбований.
Берін Лорич

1
@BerinLoritsch Технічно це не одиничний тест, я б дуже хотів знати, на чому "технічно" ви базуєте це твердження. Наскільки я можу сказати, немає єдиного авторитетного визначення одиничних тестів, і кожен отримав власне уявлення про те, що вони "є ".
gbr

2
@gbr Існує неофіційна домовленість серед розробників, що одиничні тести - це тести, які виконуються ізольовано від зовнішніх систем. Вони перевіряють лише сам код, а не взаємодію з файлами, базами даних або іншими зовнішніми службами. Вікіпедія підтверджує це розуміння: en.wikipedia.org/wiki/Unit_testing#External_work .
jpmc26

1
@BerinLoritsch Можливо також, що ми всі трактуємо питання по-різному, так чи інакше, це було не дуже детально, і автор ще ні до кого не повернувся. Мені не дуже цікаво далі обговорювати класифікацію цих тестів, важливо, чи вони повинні існувати (я майже впевнений, що вони повинні) та як часто їх запускати (при кожній зміні IDE, у кожній місцеві комісії, при кожному натисканні до центрального сховища, у будь-який час ...).
gbr

19

Неправильно називати тести, які отримують доступ до файлів "Тести одиниць".

Він: "Ці речі не належать до одиничних тестів"

Ви: "Має сенс, але я не міг знайти кращого місця, щоб розмістити їх. Де вони належать?"

На жаль, які види тестів існують і як вони організовані, є цілком специфічними для компанії. Тож вам потрібно буде з’ясувати, як ваша компанія справляється з цими тестами.

Якщо у вас ще немає способу запустити автоматизовані тести, окрім модульних тестів, прагматичним підходом є позначення одиничних тестів, які насправді не є тестовими підрозділами, до того часу, поки у вас їх не вистачить, щоб почати з'ясовувати, що таке тести, які ви насправді маєте / потребуєте. Після цього можна приступати до організації.


2
Неправильно називати тести, які отримують доступ до файлів "Тести одиниць". Тут файл, до якого доступ, - це вихідний файл. До нього можна отримати доступ так само, як і до будь-якого вихідного файлу (для його розбору). Той факт, що тест, ймовірно, не буде зроблений тією ж мовою "одиниці", що перевіряється (SQL), робить його неортодоксальним, але не повинно впливати на його класифікацію як одиничний тест. продовжується ...
gbr

1
... Насправді правильне кодування файлу - це "тест", який робиться будь-яким компілятором щоразу, коли він читає вихідний файл. Тут проблема полягає в тому, що, будучи зовнішнім файлом, що інтерпретується під час виконання, "тести компілятора" не запускаються автоматично, і тому цілком доречно їх додавати явно, і я думаю, що це справедливо можна вважати "тестовою одиницею" цього Фрагмент SQL І видається розумним включити його до (потенційного) набору тестів, що виконуються при кожній модифікації файлу.
gbr

3
До речі, проти чого зазвичай рекомендується отримати доступ до зовнішніх файлів, коли це можна замінити макетом чи чимось таким чином. І за більшості визначень одиничні тести можуть отримати доступ до зовнішніх файлів або будь-якого іншого, проти цього настійно рекомендується, оскільки це може значно уповільнити роботу. У магазині вільно прописати, що ви не можете додавати тести, які отримують доступ до файлів, до набору тестів, який запускається найчастіше, але це не робить таких тестів недостойними позначення "тестовий блок", вони просто роблять їх "не" бути поміщеним у тестовий набір цього проекту ", який найчастіше виконується".
gbr

2
@Warbo Це є поганою практикою для доступу до файлів (в цілому), і (найголовніше) причина полягає в тому , що вони не сповільняться , якщо вони пов'язані з «ГЗ перечитав листкову посилання NFS», вони повільно , якщо, наприклад , зі посиланням на Майкл Пер , вони займають 1/10 секунди. Це тому, що ви хочете запускати свої тести якомога частіше, в ідеалі при кожній зміні, яку ви внесли в IDE, і коли у вас їх багато (як слід), навіть 10-ти секунд накопичується на години. (продовжується ...)
gbr

1
@Warbo .. Однак, важливо, це загальний час, який вони займають, тому якщо у вас дуже маленький проект, який ви впевнені, що він залишиться малим, ви можете бути набагато поблажливішими щодо швидкості окремих тестів. І якщо ви дійсно не хочете часто їх запускати, ви можете повністю зателефонувати їм, щоб викликати співробітника OPMROC, щоб забрати та надіслати факсом файл із кабінету. Ви також можете бути більш вразливими, поки у вас ще мало тестів, і повернутися, щоб пришвидшити їх, коли вони почнуть брати занадто багато, але ви повинні врахувати, що це борг, який ви накопичуєте.
gbr

14

Про це говорить Майкл Перо у своїй книзі «Ефективна робота зі спадковим кодексом»:

У цій галузі люди часто повертаються вперед і назад щодо того, чи є конкретні тести одиничними тестами. [...] Повертаюсь до двох якостей: чи швидко проходить тест? Чи може це допомогти нам швидко локалізувати помилки?

Чи допоможе ваш тест швидко локалізувати помилки та швидко працювати? Якщо так, то зробіть це! Якщо ні, то не варто! Це так просто!

Коли це говориться, ви працюєте в оточенні з іншими людьми і з ними доводиться ладити. Можливо, вам доведеться зробити це так, навіть якщо ви з цим приватно не погоджуєтесь.


Це добре правило, але він би пощадив розгубленості, якби написав " чи додавати конкретні тести до набору тестів, які найчастіше виконуються ", а не замішати на термін "одиничний тест".
gbr

1
@gbr Якщо результати тесту є точними, важливо лише те, наскільки швидко він працює. Якщо у мене є 100 тестів, які проводяться менше ніж за 0,1 секунди, загалом вони будуть працювати менше ніж за 10 секунд. Я радий часто їх запускати. Якщо у мене буде 1000 тестів, вони займуть до 1м40с. Це занадто довго, я не запускатиму їх часто, але я запускатиму їх, як тільки я вніс зміни з меншою групою з 100 тестів. Мені байдуже, чи це технічно тест на прийняття чи щось інше. Якщо мені допоможуть швидше знайти помилки, я зроблю це незалежно від семантики. Тест надає значення лише під час його запуску.
CJ Dennis

Я в основному погоджуюся (незалежність - це ще одна дуже важлива річ, наприклад), але, тим не менш, було б краще, якби Майкл Пірс не посилив плутанину щодо того, що означає "одиничний тест". Не те, що він особливо винен у цій плутанині (і його книга відмінна, в частинах, про які я досі скуйовував). Я все-таки робив досить незначну думку.
gbr

@gbr Він не переосмислює одиничні тести, він говорить, що це не повинно бути вашим критерієм включення. Ваш критерій повинен бути корисністю, і саме це він визначає.
CJ Dennis

Я перечитав цей розділ; Я не впевнений, мені незрозуміло, чи мається на увазі це (своєрідне) визначення чи просто критерій. Але насправді " Чи може ми допомогти нам швидко локалізувати помилки ", це може означати те, що він говорив раніше, про ізоляцію тощо. Тож я міг би не метушитися ні про що (хоча тільки вашу відповідь все-таки можна було трактувати неправильно)
gbr

10

Я колись писав подібні тести на файли вихідного коду, файли конфігурації тощо. Я б не називав їх одиничними тестами, оскільки (а) вони отримують доступ до файлової системи і можуть бути не надто швидкими (б) Мені все одно, чи вони виконуються під час кожного заїзду (на відміну від нічного на CI-сервер).

Ви можете назвати їх інтеграційними тестами; Безумовно, вони ближче до цієї точки зору, ніж одиничні тести.

Мій власний термін для них - тести на ресурси . IMHO, вони цілком виправдані, якщо виконуються щоночі на сервері CI: є мінімальні витрати і при розумному використанні чітко додають вартості. Одне визначення розумно : якщо тест перевіряє проблему, яка викликала проблему (наприклад, кодування, яке ви згадуєте).


4

Тест одиниці - це тестування методу або "одиниці" коду. Ви перевіряєте найменшу групу логіки та коду у вашому програмному забезпеченні.

Пізніше, коли ви приєднаєтесь до цього з іншими підрозділами, ви проведете тестування інтеграції.

Я сподіваюся, що керівник вашої команди заохотив вашу ініціативу і повинен був запропонувати альтернативні пропозиції. Ви точно маєте правильну ідею.

Ваш SQL є кодом, як і будь-яка мова нижчого покоління, на зразок C # або Java, і його слід перевірити як такий. А перевірка та перевірка належать до всіх рівнів тестування. Отже, кодування та оператори SET включені, але не обов'язково перевіряються виключно. Загальні речі, такі як закінчення рядків або додавання, зазвичай можуть просто використовувати гак або функцію SCM.

Найкраща практика - провести регресійні тести, щоб запобігти повторному введенню попередніх помилок. Як правило, тести створюються поряд з будь-якою роздільною здатністю помилки. Якщо ці помилки не охоплені регресійними тестами на рівні одиниці / інтеграції чи системному рівні, а потім знову вводяться - це командна проблема, проблема процесу, а не індивідуальна.

Річ у тому, що ... синтаксичні помилки, відсутні слова або логічні блоки всередині "одиниці" зазвичай не тестуються. Ви тестуєте входи та виходи пристрою в різних комбінаціях, випробовуючи безліч можливостей, які можна створити.

Повернення до відсутніх операторів SET - вони допомагають повідомити про багато можливостей введення та виведення для тестування. Який тест ви б написали, що не вдасться, якби ви пропустили будь-який обраний SET?


Тестування "одиниці коду" - це один підхід до одиничного тестування. На мій досвід, це призводить до тендітних випробувань і масивного роздуття (наприклад, надмірного глузування). Альтернативним, а ІМХО кращим, підхід до тестування блоків є "одиниця функціональності". Не має значення, якщо для певного функціонування (скажімо, "встановлення файлу cookie під час входу в систему") потрібен один метод або десяток взаємозв'язкових процесів, це все одно один блок.
Варбо

@Warbo - я б назвав це ближчим до (але не) тестуванням інтеграції. Тестування блоку нічого не вимагає надмірного або масового. Одиничні тести повинні бути невеликими і швидкими. Насправді тестування на функціональність призводить до того, що ви описуєте. Крихкі тести - це ті, що на 1. більше або роблять більше, ніж повинні. 2. сильно поєднані 3. не несуть єдиної відповідальності.
Росс

3

Якщо у вас є файли, які стають частиною вашого продукту, їх вміст повинен бути правильним. Немає причин, чому б ви не підтвердили це. Наприклад, якщо вам потрібно шість зображень 1024x 1024 в якійсь папці, то обов'язково напишіть одиничний тест, який перевіряє, що у вас саме це.

Але у вас, мабуть, не просто файли, у вас також є якийсь код, який читає файли. Ви можете написати одиничний тест для цього коду. У наведеному вище прикладі, чи функція зчитування одного з шести зображень повертає зображення 1024 х 1024 в пам'ять (або все, що воно повинно було створювати).

У будь-якому випадку це може бути не одиничний тест, але це корисний тест. І якщо ви використовуєте блок тестування одиниць, який дозволяє зробити корисний тест (це не одиничний тест), чому б не використати блок тестування одиниць?


2

Можливо, я нерозумію вашу проблему, але для мене це звучить як проблема, яка не повинна бути захоплена будь-яким спеціальним тестом, а просто системою контролю версій . Будь-які зміни в кодовій базі повинні бути переглянуті "патч за патчем" перед вчиненням. Простий спосіб зробити це в git - додати зміни за допомогою

git add -p

Це стосується кожної зміни текстового файлу в робочому каталозі запитає, чи дійсно ви хочете зберегти його. Це дозволило б побачити, наприклад, видалення цих "початкових SETзаяв".

У випадку, якщо кодування цілого файлу зміниться, все-таки відбудеться git add -pщось інше: алгоритм не зможе відрізняти старий і новий файл, а отже , взагалі нічого не додасть. Тоді це буде видно в іншій команді, яку я виконував би перед будь-яким вчиненням, а саме

git status

Тут ви побачите файл виділений червоним кольором, вказуючи , що є зміни. Дослідження того, чому вони цього не зробили git add -p, швидко зробить проблему очевидною.


моліться, скажіть, як це допомагає будь-якому майбутньому розробнику уникнути точно такої самої проблеми? ... річ у автоматизованих тестах (також стосується тверджень та дизайну за контрактом) полягає в тому, що вони є, ну, ем, автоматизовані .
vaxquis

@vaxquis це запобігає точно таку ж проблему - хоча і дещо випадково, як побічний ефект робочого процесу, який є хорошою ідеєю з різних причин. Моя думка, що ця проблема може статися взагалі, показує, що команда ОП не дуже добре використовувала свій ДКС. - Нічого проти автоматизованих тестів, але їх значення полягає в тестуванні семантичних властивостей, які можуть порушитися нешкідливими змінами логіки програми. Це не перевірити всі можливі дурні способи зміни вихідного коду .
близько

за вашою логікою нам не потрібні ремені безпеки; нам просто потрібно їхати обережніше і спричиняти менше ДТП ... Ви пропустили головний пункт, піднятий ОП - помилку людини . Жодна кількість VCS не може захистити вас від цього . Також FWIW: якщо тест може бути автоматизований, його слід автоматизувати. Люди завжди є найслабшими ланками інженерних процесів. gitє найкращим прикладом цього - чудовий інструмент, але ледве непридатний для простого смертного .
vaxquis

@vaxquis Ні, ні! Ремені безпеки є аналогами виду тестів, які мають сенс: вони охоплюють широкий спектр ситуацій, які можуть виникнути випадково. Тест на кодування файлів був би аналогом робота, який слідкує за тобою навколо і не дозволяє задушити себе, набиваючи боби в ніс.
близько

У відповідності з ОП, файли в неправильному форматі сталося двічі вже, так що, по- видимому , вони є , ймовірно, відбуваються випадково.
gnasher729

1

Ще один аспект, який слід врахувати: оскільки ці дві умови є вимогами для запуску вашої програми, чи не слід ви вбудовувати логіку поряд із логікою виконання? Я маю на увазі: ви перевіряєте наявність файлу перед його читанням та / або перевіряєте його вміст, правда? так як це відрізняється? Я думаю, що оскільки це кодовий ресурс, його слід перевірити під час виконання, перш ніж його реально використовувати. Результат: сильніший додаток, не потрібно писати додаткові тести.


1
Як невдача лише під час виконання робить її сильнішою програмою? Звичайно, може бути доцільним також встановити перевірку виконання поруч із джерелом проблеми, але якщо ви зможете виявити помилки, перш ніж вони спричинить проблеми виконання, це набагато краще, ви не думаєте? Ви впевнені, що знайомі з автоматичним тестуванням?
gbr

1
"Як невдача лише під час виконання робить її сильнішою програмою?" Скиньте виняток, якщо чек не вдається. У своєму тесті просто переконайтеся, що розділ коду, який тестується, повертає очікуваний результат: це зніме тягар, щоб перевірити ще одну причину його відмови.
Д-р Джанлуїджі Зейн Занеттіні

1
Ваша стратегія не має нічого спільного з тестуванням одиниць і автоматизованим тестуванням загалом, це різна річ, з різним використанням.
gbr

1
Я збирався запропонувати це. Помилка - деталь реалізації; Я думаю, що відповіді були б дуже різними, якби кодування хитрості було в приватному полі, а не окремим файлом! Здається, що у ОП є 2 проблеми: файли ресурсів можуть бути погано закодовані, а виробництво поводиться інакше на розробник. Перевіряючи файл під час виконання, безпосередньо перед його використанням, ми вирішуємо другу проблему: dev і prod видадуть ту саму помилку. Потім одиничні тести можуть зосереджуватися на фактичній функціональності, а не на деталях реалізації; ці "внутрішні" перевірки здійснюватимуться так само, як приватні методи.
Варбо

1
@ Dr.GianluigiZaneZanettini Bah ... Я здаюсь ... Як я бачу, у кращому випадку ваша відповідь після ваших "роз'яснень" у коментарях була поза темою (не відповіддю на запитання), але насправді, як зараз, це явно неправильно! не потрібно писати додаткові тести ??? У мене недостатньо репутації, щоб це спростувати, але вважайте, що я це зробив. І я не думаю, що в продовженні цієї розмови має велике значення.
gbr

1

Тести - це той самий код, що і будь-який інший, і, якщо досить складний, також виграють ... тестування одиниць. Здається, найпростіше додати такі перевірки передумов безпосередньо в тест.

Більшість тестів досить прості, щоб цього не вимагати, але якщо деякі є досить складними, я не бачу нічого принципово неправильного з цими перевірками попереднього стану. Звичайно, тест також повинен пройти без них, але хороший тест одиниці також говорить про те, який модуль провалився.

Сценарій, який використовується як частина тесту і повинен мати певний вміст та кодування, ймовірно, одиниця. У ньому може бути набагато більше коду та логіки, ніж у решті тесту. Тест з таким сценарієм - не найкращий дизайн коли-небудь, і, якщо це можливо, його слід переробити в щось більш безпосереднє (якщо це не тест на інтеграцію).


1
автор ніде не каже, що SQL-скрипт є частиною тесту, здається, ви неправильно прочитали питання
gbr

Там важко зрозуміти, я вважаю, що сценарій SQL є частиною тесту.
h22

Ваш коментар «Там важко зрозуміти» ...
GBR

Важко зрозуміти. Відмовляючись від питання.
h22

1

По-перше - одна з цілей тестів - не допустити повторення питань у вашому коді - тому вам абсолютно слід продовжувати писати тести такого характеру.

По-друге - назвати важко. Так, це явно не "одиничні тести", але вони можуть бути бажаними та необхідними частинами процесу збирання, оскільки вони захищають вас від очевидних помилок і тому, що вони швидше дають вам відгуки про помилки (особливо якщо ви не бачите наслідки на коробці розробки).

Отже, питання насправді є (має бути у вашому контексті) більше про те, коли і як виконуються ці тести, ніж те, що вони є.

У минулому я широко використовував такий вид тесту - вони врятували нам неабиякий шматок болю.


І якщо хтось потурбується пояснити голосування, я оціню це
Мерф

1

Тестові одиниці полягають у виконанні одиниці коду ізольовано, щоб підтвердити, що він дає правильний результат для правильного введення. Ізоляція повинна зробити як досліджуваний пристрій, так і сам тест повторюваним, тобто не повинна залежати від або вводити побічні ефекти.

SQL - це не те, що можна перевірити поодиноко, тому будь-який тест SQL не є саме тестовою одиницею, і, за винятком операторів SELECT, майже певний може мати побічний ефект. Ми можемо назвати це інтеграційним тестом, а не одиничним тестом.

Завжди розумно стежити за тим, щоб будь-який дефект, який можна було ввести, можна було виявити якомога раніше в циклі розвитку, і вигідно це робити таким чином, щоб полегшити ідентифікацію джерела дефекту, щоб його можна було швидко виправлено.

Розглянуті випробування можуть бути більш доцільно переміщені з тіла "одиничних тестів" і поміщені десь в іншому місці, але їх не слід видаляти взагалі, якщо вони роблять щось корисне, як захист від можливого введення дефекту, який може зайняти години для відстеження вниз.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.