Чи є метод тестування функції тестування функцією, яка називає її, все-таки тестовою одиницею?


11

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

Коли бажано тестувати опосередковано функцію, яка викликає цільову функцію, а коли перевагу тестувати функцію безпосередньо?

Відповіді:


9

Популярне визначення одиничного тесту - це тест ISTQB:

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

Згідно з цим визначенням:

  • якщо ви пишете програму тестування для B, це одиничний тест (B).
  • якщо ви пишете програму тестування на C, це одиничний тест (з C).

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

Існує також визначення тесту на інтеграцію :

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

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


5

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

Набагато важливіше те, щоб ваш набір тестових підрозділів для певного підрозділу мав близько 100% покриття рядків, а також перевірити всі практично очікувані шляхи коду.


1

Так, ми все ще називаємо це тестовою одиницею, якщо функції викликають інші функції.

Тестові одиниці повинні перевірити поведінку класу, а не приватну реалізацію. Як запропоновано тестуванням Google щодо статті про туалет .

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

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

Інтеграційний тест :

Тепер, якщо функція є частиною іншого класу, вона відрізняється. Тоді ми би назвали це тестування компонентів або тестування інтеграції. Ви інтегруєте кілька класів і проводите тест проти них. Функція B залежатиме від функції C. Щоб мати змогу тестувати функцію B, ви можете використовувати введення залежності, щоб виділити функцію, яку ви протестуєте, тепер це буде тест одиниці знову.

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