Alexander
а то конечно, все считают что они нужны. Я тоже. Но чтобы понтоваться тестами, они должны быть и функциональными, и и нтерграционными. А столько тестов я писать не собираюсь )
Anonymous
Мерль
не пишут тесты
@
тратят недели на отладку принтами
@
после каждого изменения повторять заново
Мерль
такое
⏺ Vаdim
😂😂😂
Alexander
Скиньте кто нибудь mysql.cnf с какого нибудь боевого сервера, plz
Alexander
о да, а кто пишет тесты, не дебажат, вахахахах )
⏺ Vаdim
зачем дебажить, когда есть fmt.Println))))
Dmitry
Дали приложение, исправить багу.
Нужно было в нескольких местах исправлять и добавить 1 канал. Тестов не было, исправлять отказался, поставил костыль, рядом комментарий.
Pawel
⏺ Vаdim
⏺ Vаdim
⏺ Vаdim
не в обиду если че)
⏺ Vаdim
пятницо
⏺ Vаdim
все мои подколы без злого умысла
Andrey
был проект, небыло тестов, все хорошо работало и все были довольны, проект рос, и в какой-то момент начал ломатся, разработчики вместо внедрения фич чинили баги, когда баги починили решили не внедрять новых фич, а покрыть хоть как-то проект тестами, первые тесты которые были, это просто функции которые запускали другие функции, не ожидая какого-то ответа (просто проверяли не вылетело ли все в панику) и даже такие тесты нашли кучу багов в проекте, хз зачем я это пишу :)
Andrey
ну в общем какой-то мало-мальски большой проект написать без тестов просто не реально (возможно я и все мои коллеги просто туповаты, такой вариант тоже не стоит исключать)
ceiling cat
был проект, небыло тестов, все хорошо работало и все были довольны, проект рос, и в какой-то момент начал ломатся, разработчики вместо внедрения фич чинили баги, когда баги починили решили не внедрять новых фич, а покрыть хоть как-то проект тестами, первые тесты которые были, это просто функции которые запускали другие функции, не ожидая какого-то ответа (просто проверяли не вылетело ли все в панику) и даже такие тесты нашли кучу багов в проекте, хз зачем я это пишу :)
Жизненно, на самом деле
Dmitry
Есть другая сторона медали. Мой коллега, каждой структуре пишет интерфейс. Каждое поле структуры приватное, и для неё написан геттер. И для каждого геттера написан юнит-тест. Хотя в большинстве они просто возвращают значение поля.
ceiling cat
Это странные тесты, на мой взгляд
Anatoly
get/set отличный способ отлова несанкционированного изменения значения поля структуры.
Anatoly
при командной разработке иногда сокращает в разы время поиска проблемы, для одиночек неактуально
Dmitry
Anatoly
не знаю
Andrey
в других языках гетеры и сетеры часто используются, и в той-же идеи генерируются автоматически
Andrey
странно что для го такого нету
⏺ Vаdim
был проект, небыло тестов, все хорошо работало и все были довольны, проект рос, и в какой-то момент начал ломатся, разработчики вместо внедрения фич чинили баги, когда баги починили решили не внедрять новых фич, а покрыть хоть как-то проект тестами, первые тесты которые были, это просто функции которые запускали другие функции, не ожидая какого-то ответа (просто проверяли не вылетело ли все в панику) и даже такие тесты нашли кучу багов в проекте, хз зачем я это пишу :)
Жизненно, На больших проектах остуствие/присутсвие тестов очень резко сказывается на дальнейщих фичах, когда проект рабочий и приносит деньги
Michael
протестил кнопку нет - работает
Pawel
⏺ Vаdim
Помню на таком проекте запилил фичу, запустил тесты, 2 теста не прошли
Смотрю, блин да они вообще не связанны с моей фичией, ну никак, почему ломаются. Начал смотреть в код, бац очень очень косвенно зависиость была таки. Без тестов я бы думал что все ок, и только на бою когда бы стали отваливаться клиенты, только тогда бы узнал что-то то не так, по логам, звонкам в тех поддержку, это же ппц
⏺ Vаdim
⏺ Vаdim
Pawel
я - крайне редко. у меня ни когда не было 100% покрытия и я к этому не стремился.
Niko
Не понимаю пока с интерфейсами
Могу ли я не вывести, а получить отсюда Id??? Как это сделать?
func(c *routing.Context) error {
fmt.Printf("%+v\n", c.Get(apis.User).Id)
c.Write(c.Get(apis.User))
return nil
}
//&{Id:1}
Niko
В контекст записал, вывести могу, значит доступ к свойствам для дальнейшей работы с ними тоже должен иметь. Верно ведь?
Pawel
Niko
@ruzzke_mir Я имею структуру
type User struct {
Id int `json:"id" db:"id"`
}
func (u *User) GetId() int {
return u.Id
}
Как передать сюда мой параметр Id из контекста, что выше?
Pawel
Mike
Привет!
Никто не юзает эту либу для тестов веб- и неочень- сервисов?
https://github.com/stretchr/testify
Нравится как выглядит, читаемо, кмк.
⏺ Vаdim
Niko
@ruzzke_mir что-нибудь вроде
user := new models.User{"Id": c.Get(apis.User).Id}
Но это не работает
Pawel
Michael
вместо new может амперсанд &
Michael
Niko
Я извиняюсь за свои вопросы, но прошу помочь решить этот вопрос
Niko
@ruzzke_mir В контексте у меня находится данные пользователя, которого я получил по токену из db
"Аутентифицировал" так сказать. Однако чтоб дальше получить какие-то объекты этого пользователя мне нужен хотя бы его id. А это уже находится в контексте, потоу что в процессе аутентификации я поместил пользователя в пустой интерфейс Identify
token := parseBearerAuth(c.Request.Header.Get("Authorization"))
identity, e := fn(c, token)
if e == nil {
c.Set(User, identity)
return nil
}
Niko
здесь в identify я передаю models.User, который получил по токену из бд. Как мне теперь получить его из контекста?
Pawel
Pawel
естественно это очень схематичный ответ
Niko
вот кстати мой routing.Contect
func (c *Context) Get(name string) interface{} {
return c.data[name]
}
// Set stores the named data item in the context so that it can be retrieved later.
func (c *Context) Set(name string, value interface{}) {
if c.data == nil {
c.data = make(map[string]interface{})
}
c.data[name] = value
}
Anonymous
Что-то как-то сложно
Anonymous
лучше: user := c.Get(apis.User).(models.User)
Niko
Niko
@nuqzz не катит
Anonymous
и вообще злобный микс из литерала и new
Niko
@nuqzz
level=error msg="interface conversion: interface {} is *models.User, not models.User"
Pawel
Anonymous
очевидно, что даже gotour не был пройден на эту тему)
Niko
@nuqzz дружище, спасибо большое!!! наконец-то получил данные из контекста.
Пошел дальше изучать go на примере создания микросервиса
jajaeee
Michael
го тур не читай - микро сервисы клепай)
Niko
😂😂😂
Niko
тогда все будет точно по феншую)))
Pawel
господа, кто нибудь gopherjs использует? я уже тут как-то спрашивал. не ужели по нулям?
Valentin
вчера на митапе про него вещали
Anatoly
Valentin
Общий вывод- все работает, но писать фронт на нем это изврат
Anatoly
презентовал игрушку на Go на базе GotherJs
Anatoly
попробуй связаться
Pawel
Pawel
Valentin
Valentin
Да просто смысла нету даже
Valentin
Лучше уж TypeScript