it-swarm.com.ru

В чем разница между юнит-тестами и интеграционными тестами?

В чем разница между юнит-тестами и интеграционными тестами?

Есть ли разные названия для этих тестов? Как некоторые люди называют функциональные тесты модульных тестов и т.д.?

347
Books

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

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

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

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

546
Nathan Hughes

Модульный тест не должен зависеть от кода вне тестируемого модуля. Вы сами решаете, что это за единица, ища самую маленькую тестируемую деталь. Там, где есть зависимости, они должны быть заменены ложными объектами. Насмешки, заглушки. Поток выполнения тестов начинается и заканчивается в наименьшем тестируемом блоке.

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

87
Dave

Модульный тест проводится в (насколько это возможно) полной изоляции.

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

41
The Communist Duck

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

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

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

14
Karl Rosaen

Модульное тестирование обычно выполняется для одной функциональности, реализованной в программном модуле. Объем тестирования полностью находится в этом модуле программного обеспечения. Модульное тестирование никогда не соответствует окончательным функциональным требованиям. Подпадает под методику тестирования whitebox.

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

11
Jeganraj