Size: a a a

2021 February 02

((

(fun () -> ()) in pro.elixir
Ihor Katkov
Я вроде бы все описал :) Если SQL или NoSQL транзакции нельзя изолировать для каждого теста, тогда такие зависимости становятся Shared и это уже не подпадает под категорию unit тестов
а если нужно сменить базу будет на базу без изоляций. Тогда выходит всё переписать нужно?
источник

IK

Ihor Katkov in pro.elixir
(fun () -> ())
а если нужно сменить базу будет на базу без изоляций. Тогда выходит всё переписать нужно?
Это, очевидно, повлечет за собой довольно масштабные изменения. Сложно представить use case, где нужно одномоментно слезть с Postgres на NoSQL и при этом не переписав кучу логики не только в тестах, но и в самом коде
источник

((

(fun () -> ()) in pro.elixir
Ihor Katkov
Это, очевидно, повлечет за собой довольно масштабные изменения. Сложно представить use case, где нужно одномоментно слезть с Postgres на NoSQL и при этом не переписав кучу логики не только в тестах, но и в самом коде
а что если домен сделать чистым?
источник

IK

Ihor Katkov in pro.elixir
(fun () -> ())
а что если домен сделать чистым?
я согласен с тобой, что core домен нужно стараться держать чистым. Я писал скорей о юнит тестировании в эликсир экосистеме и что наличие базы в тестах это ок
источник

((

(fun () -> ()) in pro.elixir
Ihor Katkov
я согласен с тобой, что core домен нужно стараться держать чистым. Я писал скорей о юнит тестировании в эликсир экосистеме и что наличие базы в тестах это ок
ты ж сам сказал что надо будет переписать кода много(домена). Значит то что вы тестировали не было юнитом, а значит и юнит тест на них не написать. Давайте я перефразирую "аличие базы в тестах это ок" - наличие определенных баз в тестах это ок
источник

IK

Ihor Katkov in pro.elixir
(fun () -> ())
ты ж сам сказал что надо будет переписать кода много(домена). Значит то что вы тестировали не было юнитом, а значит и юнит тест на них не написать. Давайте я перефразирую "аличие базы в тестах это ок" - наличие определенных баз в тестах это ок
> Значит то что вы тестировали не было юнитом
Это не так.

> Давайте я перефразирую "аличие базы в тестах это ок" - наличие определенных баз в тестах это ок
Да, это верно
источник

((

(fun () -> ()) in pro.elixir
не, ну вообще имеет смысл. Из-за высокой скорости разработки (относительно языков на которых я писал до elixir) в случае кардинальной смены архитектуры проще, наверное, переписать, чем сразу поддерживать систему для таких изменения. Я правильно понял идеологию Elixir?
источник

IK

Ihor Katkov in pro.elixir
нет, это не является идеологией, на сколько я понимаю :)

Есть ряд community стандартов, которые поддерживают определенный подход к юнит тестам по причинам, которые я описал выше

> в случае кардинальной смены архитектуры проще, наверное, переписать, чем сразу поддерживать систему для таких изменения
Почти наверняка, переписывание будет поэтапным в независимости от ЯП
источник

RK

Roman Kolesnev in pro.elixir
Еще наброшу. Проще писать не мокая БД. В случае постгри и ecto - там даже параллельные тесты можно поддерживать (sandbox adapter).

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

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

Дрочево на "идельно чистые юнит тесты" никому не нужно если оно не делает жизнь проще.
источник

AL

Anton Lapshin in pro.elixir
ecto в nosql в принципе не умеет. три с половиной калечных заброшенных адаптера это подтверждает. даже в activerecord рельсовом переход на ту же монгу с sql был пусть и проще, но тоже в деталях нетривиален, а в ecto с его подходом, кмк, вообще никак
источник

AL

Anton Lapshin in pro.elixir
> Дрочево на "идельно чистые юнит тесты" никому не нужно если оно не делает жизнь проще.

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

LL

Lama Lover in pro.elixir
Anton Lapshin
ecto в nosql в принципе не умеет. три с половиной калечных заброшенных адаптера это подтверждает. даже в activerecord рельсовом переход на ту же монгу с sql был пусть и проще, но тоже в деталях нетривиален, а в ecto с его подходом, кмк, вообще никак
Ну вот для кассандры есть неплохой адаптер...
источник

AL

Anton Lapshin in pro.elixir
есть ли большой смысл налегать именно на юнит и игнорить интеграционные - для меня очевидно
источник

AL

Anton Lapshin in pro.elixir
Lama Lover
Ну вот для кассандры есть неплохой адаптер...
не обновлявшийся с 2018, ага
источник

RK

Roman Kolesnev in pro.elixir
Anton Lapshin
есть ли большой смысл налегать именно на юнит и игнорить интеграционные - для меня очевидно
Я за интеграционные обеими руками, ес че)
источник

AL

Anton Lapshin in pro.elixir
Roman Kolesnev
Я за интеграционные обеими руками, ес че)
и я
источник

AL

Anton Lapshin in pro.elixir
чем больше логики даже неявно тестами цепляешь, тем выше шанс, что не пропустишь какую-нибудь ерунду, когда у тебя один модуль передаёт в другой модуль параметры не в том порядке
источник

RK

Roman Kolesnev in pro.elixir
Просто пытался в пет-прожекте писать все юниты максимально в изоляции и понял, что в 90% случаев это бессмысленное дрочево которое делает код сложнее.
источник

AL

Anton Lapshin in pro.elixir
Anton Lapshin
чем больше логики даже неявно тестами цепляешь, тем выше шанс, что не пропустишь какую-нибудь ерунду, когда у тебя один модуль передаёт в другой модуль параметры не в том порядке
и это особенно актуально для языков типа руби
источник

LL

Lama Lover in pro.elixir
Roman Kolesnev
Просто пытался в пет-прожекте писать все юниты максимально в изоляции и понял, что в 90% случаев это бессмысленное дрочево которое делает код сложнее.
Когда один пишешь код, правила вообще совершенно другие

Для меня юнит-тесты, это как doctests 2.0. То есть там можно подсмотреть и на окружение, в котором должен код работать, как код должен вызываться, что код возвращает и всё такое.

Ещё юнит-тесты позволяют очень быстро и легко выявлять какие-нибудь простые ошибки из серии "забыл раскомментить код" и всё такое
источник