Size: a a a

2020 April 27

D

Darwin in Go-go!
ее только в жисон смаршалить и отдать юзеру остается
источник

E

Edgar in Go-go!
Roman Covanyan
да. проверено. часть моками можно закрыть, но далеко не все. джойны уже не закроешь.
????
Это почему?
источник

DP

Daniel Podolsky in Go-go!
Roman Covanyan
да. проверено. часть моками можно закрыть, но далеко не все. джойны уже не закроешь.
не надо, чтобы джойны проникали на уровень бизнес-логики. не надо. иначе нам всем труба
источник

AK

Anton Kucherov in Go-go!
Darwin
да и сейчас грешат, то тут то там хранимки всплывают
Хуже всего когда начинают смешивать. Вот тогда получается просто каша. И доказательств этому просто море и каждый с этим сталкивался думаю.
источник

RC

Roman Covanyan in Go-go!
Edgar
????
Это почему?
ну а чем ты движок джойнов заменишь? заранее рассчитанным датасетом в переменной?
источник

E

Edgar in Go-go!
У меня есть метод у интерфейса Repo
GetAccount(ctx, id) (*User, err)
Инфа о юзере раскидана в несколько таблиц

Бизнес логика об этой знает? Нет, ей насрать, она дергает аккаунт по ID и срать что там, джоины или не джоины
источник

RC

Roman Covanyan in Go-go!
Daniel Podolsky
не надо, чтобы джойны проникали на уровень бизнес-логики. не надо. иначе нам всем труба
мы обсуждаем чем заменить sql.DB. как же без них? а еще транзакции, вот ведь беда :)
источник

DP

Daniel Podolsky in Go-go!
Roman Covanyan
мы обсуждаем чем заменить sql.DB. как же без них? а еще транзакции, вот ведь беда :)
как оказалось - самым простым способом решить проблему является “не втаскивать *sql.DB в код бизнес-логики, написать прослойку”
источник

AK

Anton Kucherov in Go-go!
Надо просто запретить разрабатывать на Go бизнесовые приложения. Только инфраструктуру и только перекладывание байтиков. Тогда все холивары моментально закончатся.
источник

RC

Roman Covanyan in Go-go!
Edgar
У меня есть метод у интерфейса Repo
GetAccount(ctx, id) (*User, err)
Инфа о юзере раскидана в несколько таблиц

Бизнес логика об этой знает? Нет, ей насрать, она дергает аккаунт по ID и срать что там, джоины или не джоины
тогда это вопрос не про мок sql.DB, а про мок GetAccount
источник

МП

Мимо Проходящий... in Go-go!
Edgar
Если у тебя в бизнес логике будет торчать прокидывание *sql.DB, как ты его замокаешь? Как ты протестируешь логику без подключения к реальной бд? Поднимаешь тестовую БД? У тебя 450 тестов только в слое бизнес логики, ты не думаешь, что мягко говоря, это будет не удобно?
У меня то, чего Даниэль так страшно баица - тригггры, сторед-процедуры, которые делают львиную часть бизнес логики. Каким образом ты предлагаешь мне мокать их функционал, переписать мускул? И потом - на кой хрен мне тестить sql.DB ? с этой стороны обычно проблем нет, а если и возникают - фиксятся мгновенно
источник

DP

Daniel Podolsky in Go-go!
Roman Covanyan
тогда это вопрос не про мок sql.DB, а про мок GetAccount
а вот его замокать вообще нет проблем
источник

E

Edgar in Go-go!
Roman Covanyan
тогда это вопрос не про мок sql.DB, а про мок GetAccount
Берешь такой gomock и генеришь мок
источник

RC

Roman Covanyan in Go-go!
Daniel Podolsky
как оказалось - самым простым способом решить проблему является “не втаскивать *sql.DB в код бизнес-логики, написать прослойку”
верно. но при этом надо понимать, что работа с базой останется непротестированной.
источник

DP

Daniel Podolsky in Go-go!
Мимо Проходящий
У меня то, чего Даниэль так страшно баица - тригггры, сторед-процедуры, которые делают львиную часть бизнес логики. Каким образом ты предлагаешь мне мокать их функционал, переписать мускул? И потом - на кой хрен мне тестить sql.DB ? с этой стороны обычно проблем нет, а если и возникают - фиксятся мгновенно
я боюсь, коллега, не этого всего, а того, что мне придется ваш код читать и модифицировать. и хорошо, если вы к тому времени уже покинете компанию. а если нет - я могу и сесть за тяжкие телесные :)
источник

E

Edgar in Go-go!
Roman Covanyan
верно. но при этом надо понимать, что работа с базой останется непротестированной.
Покрыть тонкий слой работы БД можно интеграционным тестом, ведь там логики нет никакой и покрыть такое не проблема
источник

E

Edgar in Go-go!
Repo превращается в супер тонкий объект, который умеет в "Дай, Обнови, УДали, Сохрани"
источник

RC

Roman Covanyan in Go-go!
Edgar
Покрыть тонкий слой работы БД можно интеграционным тестом, ведь там логики нет никакой и покрыть такое не проблема
если три таблички и пять запросов то конечно не проблема
источник

DP

Daniel Podolsky in Go-go!
а если 30 таблиц и сотня запросов - тем более нельзя это допускать до кода бизнес-логики
источник

МП

Мимо Проходящий... in Go-go!
Daniel Podolsky
я боюсь, коллега, не этого всего, а того, что мне придется ваш код читать и модифицировать. и хорошо, если вы к тому времени уже покинете компанию. а если нет - я могу и сесть за тяжкие телесные :)
А вот теперь поясните мне коль скоро вы такой грозный - на кой хрен использовать интерфейс, который будет реализован ОДИН раз. Тестовая бд есть, поднять её проблем нет (быстро), мокать не надо - чяднт?
источник