Найкращі практики завжди мають мету, причину. Завжди корисно враховувати ці причини у своєму дизайні - особливо коли ви намагаєтеся вирішити, як і як важко слідувати цим кращим практикам.
У цьому випадку головне обґрунтування того, щоб зробити кожен тестовий тест єдиним, полягає в тому, що якщо перша справа не вдасться, друга не буде перевірена. Оскільки здається, що занадто багато авторів думки знаходять заслугу в тому, щоб розбити все до найменших можливих шматочків і обернути кожен шматочок якомога більше, але це породило думку про те, що кожен тест повинен містити єдине твердження.
Не слідкуйте за цим сліпо. Навіть якщо кожен тест повинен перевірити одне, ви все-таки повинні задуматися над тим, щоб вирішити, якою великою чи малою повинна бути кожна «річ», і для цього потрібно пам’ятати, чому ви хочете, щоб кожен тест перевіряв одне - щоб переконатися помилка в першому не залишає перевіреної другої речі.
Отже, вам потрібно запитати себе - "чи мені справді тут потрібна ця гарантія?"
Скажімо, у першому тестовому випадку є помилка - код відповіді HTTP не є 200
. Отже, ви почнете зламати код, з’ясуйте, чому ви не отримали код відповіді, який у вас був, і вирішіть проблему. А тепер що?
- Якщо ви вручну запускаєте тест ще раз, щоб переконатися, що ваше виправлення вирішило проблему, вам слід зіткнутися з будь-якою іншою проблемою, прихованою першим збоєм.
- Якщо ви не запускаєте його вручну (можливо, тому, що це займає занадто багато часу?), А просто натисніть на виправлення, чекаючи, поки сервер автоматизованих тестів запустить все, тоді ви можете поставити різні твердження в різних тестах. Цикли в цьому випадку дуже довгі, тому варто докласти зусиль, щоб виявити якомога більше помилок у кожному циклі.
Є ще кілька речей, які слід врахувати:
Затвердження залежності
Я знаю, що описані вами тести є лише прикладом, і ваші фактичні тести, ймовірно, складніші - тому те, що я збираюся сказати, може бути неправдивим з такою силою в реальних тестах, але воно все одно може бути дещо ефективним, тому ви можливо, захоче розглянути це.
Якщо у вас є служба REST (або будь-який інший протокол HTTP), який повертає відповіді у форматі JSON, ви зазвичай пишете простий клас клієнта, який дозволяє використовувати методи REST, як звичайні методи, що повертають звичайні об'єкти. Якщо припустити, що клієнт має окремі тести, щоб переконатися, що він працює, я б дістав перші 3 твердження і зберег би лише 4!
Чому?
- Перше твердження є зайвим - клас клієнта повинен викинути виняток, якщо код відповіді HTTP не 200.
- Друге твердження є зайвим - якщо відповідь порожня, об’єкт результату буде нульовим або якесь інше представлення порожнього об'єкта, і вам не доведеться ніде класти ключ X.
- Третє твердження є зайвим - якщо JSON недійсний, ви отримаєте виняток, коли спробуєте його розібрати.
Тому вам не потрібно запускати всі ці тести - просто запустіть четвертий тест, і якщо будь-який з помилок перші три спроби виявити, тест не вдасться за правильним винятком, перш ніж ви навіть отримаєте фактичне твердження.
Як ви хочете отримувати звіти?
Скажімо, ви не отримуєте електронні листи від тестового сервера, але натомість відділ QA запускає тести та повідомляє про невдалі тести.
Джек від QA стукає у ваші двері. Він каже, що перший метод тестування виявився невдалим, а метод REST повернув поганий код відповіді. Ви дякуєте йому і починаєте шукати першопричину.
Потім приходить Джен із QA і каже, що третій метод тестування не вдався - метод REST не повернув дійсного JSON в тілі відповідей. Ви кажете їй, що ви вже дивитесь на цей метод, і ви вважаєте, що те саме, що змусило його повернути неправильний код виходу, також призвело до того, що він повернув щось, що не є дійсним JSON, і виглядає більше як слід стека винятку.
Ви повертаєтесь до роботи, але потім приїжджає Джим із QA, кажучи, що четвертий метод тестування не вдався і у відповіді немає ключа X ...
Ви навіть не можете шукати причину, тому що важко дивитися на код, коли у вас немає екрана комп'ютера. Якби Джим був досить швидким, він міг би уникнути часу ...
Електронні листи з тестового сервера простіше відхилити, але все-таки - чи не варто було б вам просто повідомити НАДЕ, що з методом тестування щось не так, і самостійно подивитися відповідні журнали тесту?