юнит тест. Это кстати относится к одной из тем над которыми я работаю для будующих докладов.
В моем понимании юнит тест это:
- Тест который работает очень быстро
- Тест который тестирует одно поведение
- Тест который запускается в изоляции от других тестов
Основываясь на этих утверждениях, я допускаю, что некоторые тесты в Elixir проектах, которые используют базу могут называться юнит-тестами.
Кто хочет по-дискуссировать? Или оставим дискуссию для афтер-пати следующего митапа? :)
Мне кажется просто неудачное название exunit как-то магически людей убеждает что они пишут юнит тесты
А почему юнит тест запускается в изоляции от других тестов
Я думаю, что потому что некоторые тесты могут измениться (вследствие изменения логики тестируемого функционала) и тогда могут упасть тесты не связанные с изменённым функционалом
Хотя я наверно не так поняла что тут значит изоляция. Подумала что параллелить нельзя
Юнит тест это тестирование какого-то юнита - отдельной единицы программы (да, она может быть большая), но это не тестирование связок
всё что идёт с базой в остальном мире называется интеграционными тестами
Ну, довольно часто база нужна и для юнит тестов, например засетапить себе какие-нибудь сущности
я понял что в elixir все так делают (везде почти так делают), но почему вы уцепились в слово "юнит". У вас не юниты, а интеграционные значит
Это ваша привычка. В рельсах и всех производных, юнит тесты с бд работают
не вижу ничего хорошего в том что бы искривлять понятия
Никогда не слышал что бы в рельсах “Интеграционным тестированием” называли тесты связанные с базой. Давайте не привязывать мнение человека к технологии.
Нет, это всё-таки юнит тесты Каждый тест, по-хорошему, состоит из четырёх частей - сетап, вызов, проверка, очистка. Так вот интеграционный тест это тест, тестирующий интеграцию. В случае с базой значит, что тестируется функционал базы, то есть вызов базы происходит во 2ой и части теста (которая вызов), причём вызов этот происходит напрямую в базу (прямо через адаптер, а не через функцию, создающую какую-то сущность) В юнит тесте вызов базы происходит обычно в 1 и 4 части (сетапе и очистке), чтобы просто создать среду, в которой можно хоть что-то делать (например, создать юзера, от которого будет выполняться какое-то действие). Это интеграционным тестом не является, потому что никакая интеграция не тестируется И основной, отличающий юнит от интеграционного теста, признак состоит в том, что если база сломается, то инграционный тест не пройдёт из-за неправильных данных в ассерте, а юнит тест упадёт и будет просто невалидным из-за сломанного сетапа
сетап, вызов, проверка, очистка это как раз признак интеграции с окружением юнит тест имеет два шага: вызов и проверка
У любого теста есть окружение, всегда. Понятно, что в идеальном розовом мире, где все функции чистые, можно и без сетапа, но любое межпроцессное взаимодействие означает наличие окружения. Например, параметры конфигурации приложения присутствуют всегда, в любом тесте
это правда, нужны чистые функции. Однако мой домен весь чистый, так что я могу себе позволить)
Обсуждают сегодня