Модульные тесты против функциональных тестов

В чем разница между модульными тестами и функциональными тестами? Может ли unit test также проверить функцию?

Ответ 1

Unit Test - тестирование отдельного модуля, например метода (функции) в классе, со всеми зависимостями.

Функциональный тест - интеграционный тест AKA, тестирование набора функций в системе. Это проверит многие методы и может взаимодействовать с такими зависимостями, как базы данных или веб-службы.

Ответ 2

Ед. тесты говорят разработчику, что код делает все правильно; функциональные тесты говорят разработчику, что код делает правильные вещи.

Вы можете прочитать больше на Тестирование устройств против функционального тестирования


Хорошо объясненная реальная аналогия модульного тестирования и функционального тестирования может быть описана следующим образом:

Много раз развитие системы сравнивалось с построением дома. Хотя эта аналогия не совсем корректна, мы можем расширить ее для понимания разницы между единичными и функциональными тестами.

Единичное тестирование аналогично инспектору здания, посещающему строительную площадку. Он ориентирован на различные внутренние системы дома, фундамент, обрамление, электричество, сантехнику и т.д. Он гарантирует (тесты), что части дома будут работать правильно и безопасно, то есть соответствовать строительному коду.

Функциональные тесты в этом сценарии аналогичны тем, что домовладелец посещает эту же строительную площадку. Он предполагает, что внутренние системы будут вести себя надлежащим образом, чтобы строительный инспектор выполнял свою задачу. Домовладелец сосредоточен на том, каково будет жить в этом доме. Он обеспокоен тем, как выглядит дом, являются ли различные комнаты комфортабельными размерами, подходит ли дом для семейных нужд, окна в хорошем месте, чтобы поймать утреннее солнце.

Домовладелец выполняет функциональные тесты в доме. У него есть перспектива пользователя.

Инспектор здания проводит единичные испытания дома. У него есть перспектива строителя.


Как резюме,

Единичные тесты написаны с точки зрения программистов. Они созданы для обеспечения того, чтобы конкретный метод (или единица) класса выполнял набор конкретных задач.

Функциональные тесты записываются с точки зрения пользователя. Они гарантируют, что система работает так, как ожидают пользователи.

Ответ 3

  • A unit test проверяет независимую единицу поведения. Что такое единица поведения? Это самая маленькая часть системы, которая может быть независимо проверена модулем. (Это определение на самом деле круговое, IOW оно действительно не является определением вообще, но оно, кажется, работает достаточно хорошо на практике, потому что вы можете понять его интуитивно.)

  • Функциональный тест проверяет независимую функциональность.


  • Единица поведения очень мала: хотя мне абсолютно не нравится этот глупый мантры "один unit test за метод", с точки зрения размера он прав. Единица поведения - это что-то между частью метода и, возможно, несколькими способами. Не более чем объект, но не более одного.

  • Часть функциональности обычно включает в себя множество методов и разрезов по нескольким объектам и часто через несколько архитектурных слоев.


  • A unit test будет примерно таким: когда я вызываю функцию validate_country_code() и передаю ей код страны 'ZZ', он должен возвращать false.

  • Функциональным тестом будет: когда я заполню форму доставки кодом страны ZZ, я должен быть перенаправлен на страницу справки, которая позволяет мне выбрать код моей страны из меню.


  • Модульные тесты написаны разработчиками для разработчиков с точки зрения разработчика.

  • Функциональные тесты могут быть обращены к пользователю, и в этом случае они создаются разработчиками вместе с пользователями (или, возможно, с правильными инструментами и нужными пользователями даже самими пользователями) для пользователей с точки зрения пользователя. Или они могут быть разработчиками (например, когда они описывают некоторые внутренние функции, которые пользователю не нужны), и в этом случае они написаны разработчиками для разработчиков, но все же с точки зрения пользователя.


  • В первом случае функциональные тесты могут также служить в качестве приемочных тестов и в качестве исполняемого кодирования функциональных требований или функциональных спецификаций, в последнем случае они также могут служить интеграционными тестами.

  • Частотные тесты часто меняются, функциональные тесты никогда не должны меняться в пределах основного выпуска.


Ответ 4

TL;DR:

Чтобы ответить на вопрос: Unit Testing является подтипом функционального тестирования.


Существуют две большие группы: Функциональные и Нефункциональные Тестирование. Самая лучшая (неисчерпывающая) иллюстрация, которую я нашел, - это один (источник: www.inflectra.com):

введите описание изображения здесь

(1) Тестирование единиц измерения: тестирование небольших фрагментов кода (функции/методы). Это может рассматриваться как функциональное тестирование (white-box).

Когда функции объединены, вы создаете модуль = отдельная часть, возможно, с пользовательским интерфейсом, который может быть протестирован (тестирование модуля). Когда у вас есть как минимум два отдельных модуля, вы склеиваете их вместе, а затем:

(2) Тестирование интеграции:, когда вы добавляете две или несколько частей (под) модулей или (под) систем вместе и видите, хорошо ли они играют вместе.

Затем вы интегрируете 3-й модуль, а затем 4-й и 5-й в любом порядке, который вы или ваша команда сочтете нужным, и как только все кусочки головоломки будут расположены вместе, придет

(3) Тестирование системы: тестирование ПО в целом. Это в значительной степени "Интеграционное тестирование всех штук вместе".

Если это ОК, то приходит

(4) Приемочное тестирование: мы построили то, что клиент попросил на самом деле? Разумеется, приемочное тестирование должно проводиться на протяжении всего жизненного цикла, а не только на последнем этапе, когда вы понимаете, что заказчику нужен спортивный автомобиль, и вы построили фургон.

введите описание изображения здесь

Ответ 5

"Функциональный тест" не означает, что вы тестируете функцию (метод) в своем коде. Это означает, что вы тестируете функциональность системы - когда я запускаю foo file.txt в командной строке, строки в file.txt могут быть перевернуты, возможно. Напротив, один unit test обычно охватывает один случай одного метода - length("hello") должен возвращать 5, а length("hi") должен возвращать 2.

См. также IBM берет линию между модульным тестированием и функциональным тестированием.

Ответ 6

Согласно ISTQB, эти два не сопоставимы. Функциональное тестирование не является интеграционным тестированием.

Unit test является одним из уровней тестирования, а функциональное тестирование - это тип тестирования.

В принципе:

Функция системы (или компонента) - это "то, что она делает". Это как правило, описывается в спецификации требований, спецификации или в случаях использования.

а

Тестирование компонентов, также известное как тестирование модулей, модулей и программ, ищет дефекты и проверяет функционирование программного обеспечения (например, модули, программы, объекты, классы и т.д.), которые отдельно проверяемым.

В соответствии с компонентом ISTQB/ unit test может быть функциональным или не-функциональным:

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

Цитаты из фондов тестирования программного обеспечения - сертификация ISTQB

Ответ 7

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

Взято из книги "Python TDD" Гарри Персиваля

Ответ 8

В Rails папка с модулем предназначена для проведения тестов для ваших моделей, функциональная папка предназначена для проведения тестов для ваших контроллеров, а папка интеграции предназначена для проведения тестов, в которых задействовано любое количество взаимодействующих контроллеров. Светильники - это способ организации тестовых данных; они находятся в папке приборов. Файл test_helper.rb содержит конфигурацию по умолчанию для ваших тестов. u можете посетить this.

Ответ 9

То, как я думаю, выглядит так: A unit test устанавливает, что код выполняет то, что вы намеревались сделать для кода (например, вы хотели добавить параметры a и b, вы фактически добавляете их, и не делаете вычесть их), тесты функциональных тестов показывают, что весь код работает вместе, чтобы получить правильный результат, так что то, что вы намеревались сделать, действительно получает правильный результат в системе.

Ответ 10

AFAIK, модульное тестирование не является функциональным тестированием. Позвольте мне объяснить небольшим примером. Вы хотите проверить, работает ли функция входа в систему веб-приложения электронной почты, как и пользователь. Для этого ваши функциональные тесты должны быть такими.

1- existing email, wrong password -> login page should show error "wrong password"!
2- non-existing email, any password -> login page should show error "no such email".
3- existing email, right password -> user should be taken to his inbox page.
4- no @symbol in email, right password -> login page should say "errors in form, please fix them!" 

Если наши функциональные тесты проверяют, можем ли мы входить в систему с недопустимыми входами? Например. Электронная почта не имеет символа @, имя пользователя имеет более одной точки (только одна точка разрешена),.com появляется перед @и т.д.? Как правило, нет! Такое тестирование входит в ваши модульные тесты.

Вы можете проверить, отклоняются ли неверные входы внутри модульных тестов, как показано в приведенных ниже тестах.

class LoginInputsValidator
  method validate_inputs_values(email, password)
    1-If email is not like [email protected], then throw error.
    2-If email contains abusive words, then throw error.
    3-If password is less than 10 chars, throw error.

Обратите внимание, что функциональный тест 4 фактически выполняет то, что делает unit test 1. Иногда функциональные тесты могут повторять некоторые (не все) испытания, проведенные модульными испытаниями, по разным причинам. В нашем примере мы используем функциональный тест 4, чтобы проверить, появляется ли сообщение об ошибке при вводе неверного ввода. Мы не хотим проверять, отклоняются ли все плохие входы или нет. Это задание модульных тестов.

Ответ 11

ИСПЫТАНИЕ ЕДИНИЦЫ

Тестирование модулей включает тестирование наименьшей единицы кода, которая обычно является функциями или методами. Модульное тестирование в основном выполняется разработчиком unit/method/function, потому что они понимают суть функции. Основная цель разработчика - охватить код модульными тестами.

У этого есть ограничение, что некоторые функции не могут быть протестированы с помощью модульных тестов. Даже после успешного завершения всех модульных испытаний; это не гарантирует правильную работу продукта. Та же функция может использоваться в нескольких частях системы, а unit test была написана только для одного использования.

ФУНКЦИОНАЛЬНЫЕ ИСПЫТАНИЯ

Это тип тестирования Black Box, где тестирование будет производиться по функциональным аспектам продукта, не заглядывая в код. Функциональное тестирование в основном выполняется специальным тестером программного обеспечения. Он будет включать в себя положительные, отрицательные и BVA-методы, используя нестандартные данные для тестирования указанной функциональности продукта. Испытательный охват проводится улучшенным способом с помощью функциональных тестов, чем с помощью единичных тестов. Он использует графический интерфейс приложения для тестирования, поэтому его легче определить, какая именно конкретная часть интерфейса отвечает за то, чтобы определить, за что отвечает функция кода.

Ответ 12

Unit Test: - Единичное тестирование особенно используется для тестирования компонента продукта по компоненту, особенно когда продукт находится в разработке. Инструменты Junit и Nunit также помогут вам протестировать продукт в соответствии с Единицей. ** Вместо того, чтобы решать проблемы после Интеграции, всегда удобно разрешить его на ранней стадии разработки.

Функциональное тестирование: - Что касается тестирования, то есть два основных типа тестирования: 1. Функциональный тест 2. Нефункциональный тест.

Non-Functional Test - это тест, в котором тестировщик будет тестировать, что продукт будет выполнять все те атрибуты качества, которые не упоминает клиент, но эти атрибуты качества должны быть там. Например: -Перификация, удобство использования, безопасность, загрузка, стресс и т.д. но в Функциональном тесте: - Клиент уже присутствует с его требованиями, и они должным образом задокументированы. Задача тестера состоит в том, чтобы проверить, работает ли функциональность приложения в соответствии с предлагаемой системой или нет. Для этого тестер должен проверить функциональность Реализованность с предлагаемой Системой.

Ответ 13

Модульные тесты обычно выполняются разработчиками. Цель этого - убедиться, что их код работает правильно. Общее эмпирическое правило состоит в том, чтобы охватить все пути в коде с помощью модульного тестирования.

Функциональное тестирование. Это хорошая рекомендация. Функциональное тестирование Пояснение

Ответ 14

очень просто мы можем сказать:

  • черный ящик: тестирование пользовательского интерфейса как функциональный тест
  • белая коробка: тестовый код, как юнит-тест

читать дальше здесь.