Size: a a a

2021 May 12

IB

Igor Botukhov in Go-go!
хм, а как лучше?
источник

АГ

Алексей Гевондян... in Go-go!
а что ты тут тестировать собрался? тут бизнес кода нет
источник

АГ

Алексей Гевондян... in Go-go!
или ты прямо апи методы тестишь?
источник

АГ

Алексей Гевондян... in Go-go!
тогда зачем что-то мокать?
источник

АГ

Алексей Гевондян... in Go-go!
раздели доменный код от инфраструктурного. доменный не должен зависеть ни от чего. код слоя приложения должен зависеть от доменного слоя
источник

IB

Igor Botukhov in Go-go!
так, как бы обьяснить, хммм. В хендлере у меня запрос принимается и отправляется на следующий слой service. Вот код:

func (a *AuthService) CreateUser(user structs.User) (int, error) {
 if !isCorrectPassword(user.Password) {
   return -1, errors.New("Incorrect password: it must contain at least 8 characters (alphabet, numbers, !@#$%^&*)")
 }
 user.Password = generatePasswordHash(user.Password)
 jsonInfoString, err := json.Marshal(user.Info)
 if err != nil {
   return -1, err
 }
 user.Info = jsonInfoString
 return a.repo.CreateUser(user)
}


И я тестирую через httptest прямо api
источник

АГ

Алексей Гевондян... in Go-go!
isCorrectPassword - это что? глобальная функция какая-то? или в модуле функция? почему она не в a?
источник

АГ

Алексей Гевондян... in Go-go!
то же и про хеш
источник

IB

Igor Botukhov in Go-go!
это функция в service, я просто прислал не весь код service-a, а только метод CreateUser
источник

АГ

Алексей Гевондян... in Go-go!
вот репо - это единственное, что тут можно замокать. все остальное не получится
источник

IB

Igor Botukhov in Go-go!
хммм, блин
источник

IB

Igor Botukhov in Go-go!
прям, никак-никак нельзя протестировать handler и сервис вместе? может нужно создать мок слоя еще ниже?
источник

АГ

Алексей Гевондян... in Go-go!
тут надо протестить 1) когда пароль некорректен 2) когда юзер не сериализуется в жсон (хз как это сделать без мока на вскидку), 3) когда все ок, что вызывается метод создания юзера. все.
источник

АГ

Алексей Гевондян... in Go-go!
плохо у тебя с инъекцией зависимостей, код сильносвязанный
источник

АГ

Алексей Гевондян... in Go-go!
еще и user меняешь... если передать туда по указателю структуру - то получишь сайдэффект... в общем надо это все порефачить как следует если по хорошему)
источник

АГ

Алексей Гевондян... in Go-go!
смысл первого возвращаемого значения какой? что за -1?
источник

IB

Igor Botukhov in Go-go!
Блин, как то грустно и сложно. А почему нельзя так юзера менять? Я же его просто между слоями кидаю и все
источник

IB

Igor Botukhov in Go-go!
id пользователя в бд. -1 чтобы понять, что произошла ошибка
источник

АГ

Алексей Гевондян... in Go-go!
если у тебя в один прекрасный день придет понимание, что надо передать струтуру по указателю - то ты сломаешь систему свою.
источник

IB

Igor Botukhov in Go-go!
угу, понял
источник