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


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

13 323

13 ответов:

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

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

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

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


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

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

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

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

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

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


в качестве резюме,

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

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

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

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


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

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


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

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


  • юнит-тесты написаны разработчиками для разработчиков, с точки зрения разработчика.

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


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

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


TLDR:

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


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

enter image description here

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

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

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

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

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

Если это нормально, то приходит

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

enter image description here

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

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

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

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

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

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

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

по сути:

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

пока

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

согласно компоненту ISTQB / модульному тесту может быть функциональным или не-функциональным:

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

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

Мне представляется это так: блок испытаний установлено, что код делает то, что вы задумали соответствующий код (например, вы хотели, чтобы добавить параметр a и B, вы на самом деле их добавить, и не отнять у них), функциональные тесты, что весь код работает вместе, чтобы получить правильный результат, так что то, что вы хотели код чтобы сделать на самом деле получает правильный результат в системе.

МОДУЛЬНОЕ ТЕСТИРОВАНИЕ

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

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

ФУНКЦИОНАЛЬНОЕ ТЕСТИРОВАНИЕ

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

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 string.string@myapp.com, then throw error.
    2-If email contains abusive words, then throw error.
    3-If password is less than 10 chars, throw error.

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

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

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

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

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

Функциональное Тестирование: Это хорошая ссылка. Функциональное Тестирование Объяснение