> как правильнее
Выбирай оптимальное соотношение, между простотой написания, скоростью выполнения, и покрытием.
Самые крутые по покрытию - end to end тесты, в рамках которых вы поднимаете всю инфраструктуру и делаете http запросы к тестируемому сервису.
Но они достаточно медленные, тиебуют сложеой инфраструктуры, да и при написании нужно думать, как сделать так, чтобы тесты друг на друга не влияли.
А теперь про свой опыт:
Имелся проект без тестов, но при этом было понятно, что его надо полностью рефакторить, и даже пару модулей с нуля переписать, ещё и переезд с одной субд на другую был. Но зато была документация на все ендпоинты.
В таком случае идеально подошёл подход с написанием тестов на HTTP.
Тогда я писал их на шарпе, но сейчас знаю, что в Postman можно не только запросы делать, но и писать тесты, которые потом запускать из консоли.
А теперь про остальное:
Все пишем по TDD, все тесты зеленые, а баги все равно появляются.
Скорее всего, проблема архитектурная. Из-за большого количества моков у вас возникло много непротестированного кода.
То что вы мокаете также должно быть полностью протестировано.
один из наших сервисов, который использует базу данных, отпарвляет SQL запрос с синкаксической ошибкой
Выносишь кусок кода, который генерирует этот SQL-запрос в новый сервис, и тестируешь, что он всегда даёт корректный синтаксис.
Советую почитать про чистую архитектуру