В чем разница между модульными тестами и интеграционными тестами?
Существуют ли разные имена для этих тестов? Как некоторые люди, вызывающие функциональные тесты модульных тестов и т.д.?
В чем разница между модульными тестами и интеграционными тестами?
Существуют ли разные имена для этих тестов? Как некоторые люди, вызывающие функциональные тесты модульных тестов и т.д.?
Unit тест - это тест, написанный программистом для проверки того, что относительно небольшой фрагмент кода выполняет то, для чего он предназначен. Они узки по объему, их легко писать и выполнять, а их эффективность зависит от того, что программист считает полезным. Тесты предназначены для использования программистом, они не являются непосредственно полезными для кого-либо еще, хотя, если они выполняют свою работу, тестировщикам и пользователям ниже по течению должно быть полезно видеть меньше ошибок.
Часть того, чтобы быть модульным тестом, подразумевает, что что-то за пределами тестируемого кода является ложным или заглушенным. Модульные тесты не должны зависеть от внешних систем. Они проверяют внутреннюю согласованность, а не доказывают, что они хорошо играют с какой-то внешней системой.
Интеграционный тест проводится, чтобы продемонстрировать, что разные части системы работают вместе. Интеграционные тесты могут охватывать целые приложения, и для их создания требуется гораздо больше усилий. Для них обычно требуются ресурсы, такие как экземпляры базы данных и аппаратное обеспечение. Интеграционные тесты выполняют более убедительную работу по демонстрации работы системы (особенно для непрограммистов), чем набор модульных тестов, по крайней мере в той мере, в какой среда интеграционных тестов напоминает производственную.
На самом деле "интеграционный тест" используется для самых разных целей: от полноценных системных тестов в среде, созданной для создания сходства с производством, до любого теста, использующего ресурс (например, базу данных или очередь), который не исключается. На нижнем конце спектра интеграционный тест может представлять собой тестовый блок, в котором выполняется репозиторий для базы данных в памяти, а на верхнем уровне это может быть системный тест, проверяющий, что приложения могут обмениваться сообщениями.
Unit тест не должен зависеть от кода вне тестируемого модуля. Вы сами решаете, что это за единица, ища самую маленькую тестируемую деталь. Там, где есть зависимости, они должны быть заменены ложными объектами. Насмешки, заглушки. Поток выполнения тестов начинается и заканчивается в наименьшем тестируемом блоке.
Когда ложные объекты заменяются реальными объектами и поток выполнения тестов пересекается с другими тестируемыми модулями, у вас есть интеграционный тест
A unit test выполняется (по возможности) полная изоляция.
Тест интеграции выполняется, когда тестируемый объект или модуль работают так, как должно быть, с другими битами кода.
A unit test проверяет код, который у вас есть полный контроль, в то время как тест интеграции проверяет, как ваш код использует или "интегрируется" с каким-либо другим кодом.
Итак, вы должны написать модульные тесты, чтобы убедиться, что ваши собственные библиотеки работают по назначению, а затем записывайте тесты интеграции, чтобы убедиться, что ваш код хорошо работает с другим кодом, который вы используете, например, с библиотекой.
Функциональные тесты связаны с интеграционными тестами, но более конкретно относятся к тестам, которые тестируют всю систему или приложение со всем кодом, работающим вместе, почти суперинтеграционным тестом.
Unit test обычно выполняется для одной функциональности, реализованной в программном модуле. Объем тестирования полностью находится в этом модуле SW. Unit test никогда не выполняет окончательные функциональные требования. Он подпадает под методологию тестирования whitebox.
В то время как тест интеграции выполняется для обеспечения реализации различных модулей SW. Тестирование обычно выполняется после интеграции уровня модуля в разработку ПО. Этот тест будет охватывать функциональные требования, но недостаточно для обеспечения проверки системы.