Вибір імен для інтеграційних тестів


13

З одиничними тестами домен зовсім невеликий, тому це легко. Я скористався methodName_conditions_result()схемою Ошерова і виявив це дуже зрозумілим.

Але з інтеграційними тестами я відчуваю, що це дозволить назвати дуже довге ім'я, і ​​що я ставлю замість цього methodName? Як назвати тестові класи інтеграції?

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


1
чому це питання було знято (двічі)?
bigstones

Відповіді:


6

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

  • canRegisterUser
  • canHandleInvalidInput
  • canRelayDocumentBet BetweenServers
  • canCreateSchema
  • canLoginUsingWebService
  • canLoginUsingBasicAuth
  • canDeleteDocument
  • canAddDocument

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

Я б також запропонував назвати будь-які одиничні тести для виправлень з унікальним префіксом, bugfix1002щоб довести, що помилка була виправлена.


5

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

Перевірте сім кроків !

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

Я радий бачити набір під назвою "MakingADeposit" з тестом під назвою "AccountDoesntExist" та помилкою, яка говорить "Очікуваний виняток NonesuchAccount - жоден не отриманий".

Крім того, якщо ви не заперечуєте, щоб я розділяв ім'я тестового набору на "::", я добре з "AccountHandling :: MakingADeposit_AccountDoesntExist_ThrowsAnException"

Картка також пропонує, якщо ви не маєте гарного імені, продовжуйте вперед і дайте краще ім’я, коли вам трапляється (сподіваємось, добре, перш ніж подавати код на CI).


2

Інтеграційні тести повинні дотримуватися деяких подібних правил до одиничних тестів, оскільки кожен тест повинен випробовувати один аспект вимоги, але випробовує систему в цілому. Клас повинен називати загальну тестуваність, наприклад, "TpcInputValidation", а іменування методу повинно чітко відображати те, що тест намагається зробити, не будучи надмірно словним, наприклад "shouldRaiseValidationErrorWithBadDates ()".

Методи повинні перевіряти одну концепцію функції, і велика кількість тверджень може вказувати на інше. (Посилання "Чистий код: Довідник з гнучкої майстерності програмного забезпечення", стор. 132, Роберт Мартін).


Чому ви вважаєте, що "одна особливість" взагалі прирівнюється до "одного твердження"? Здається, ви хочете стверджувати, що система перебуває у стані, в якому ви очікуєте її перебування, і це може бути будь-яка кількість тверджень. Але я відволікаюсь, бо питання стосується іменування, а не того, як написати тест на інтеграцію.
Джеремі Хайлер

@Andrew, я не сказав, що це важке правило, але перегляд кількості тверджень може допомогти в орієнтації на тестування концепції функції, не обов'язково одна на метод. Утримання їх дещо обмеженим за обсягом допомагає визначити, де виникають проблеми, коли вони не вдається. Але я скажу вам, що не чудово сказати одне твердження, і я відредагую це, спасибі.
під ключ

1

Тож проблема полягає в тому, що правильна назва функціональності занадто довга для імені методу? Я знаю, що незручно починати писати методи тестування з такими іменами, як registerAndValidateUnderageUniversityDriverWithCoverageSetA_test()і може колись порушити правила компілятора для довгих імен методів (PL / SQL дозволяє містити до 30 символів - я не знаю, чи Java і C # накладають такі короткі обмеження імен, але навіть якщо вони цього не зробили, вони досить невдало проходять певний момент, і справді дуже довгі назви методів можуть бути корисні лише для згенерованого коду, який зчитується / керується іншим згенерованим кодом). Ви можете спробувати скоротити його, regValUnderageUnivDrvrWCovrgA_test()але це теж дуже жахливо читати. Я використовував один варіант, який мені не сподобався, але був найкращим вибором на той часunderageUnivDrvr_test_01()а потім з’явилася таблиця, яка відображає назви методів до набагато більш тривалого опису функцій, які тестуються. Некрасиво, але це спрацювало. Ви також можете задокументувати опис тесту в документації функції у вихідному файлі, що може бути корисним, оскільки ви можете генерувати документацію тестів безпосередньо з коду, а не зіставляти таблиці назад та назад між електронною таблицею та кодом.

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