Black
Me*
suvorov
Эх.
suvorov
Доброе утро.
Mega
I use gorm, now, How do I return an array from SQL query select username from users I only get the first username
V
Напиши то же самое на го
JohnBrand
можно
/slvscm
Напиши то же самое на го
ну вообще вот так)
V
ну вообще вот так)
А теперь покрой тестами
Maks
А теперь покрой тестами
Ну так там же не так сложно это сделать. Хотя прежде всего нужно учесть, что никто не делает на бэке задачи с принтом)))))))) Эта задача она чисто на логику и с реальными задачами общего ничего не имеет от слова совсем)
Maks
Они на логику но не на принт
Maks
В этой задаче просто делаешь возвращение строки и тестируешь этот метод
V
Строки ли возвращение?
Maks
Если ты хочешь проверить именно принт целиком, то да. Но можно и по другому в целом, но немного заморочнее
Maks
придется брать os.stdout получать оттуда результат и сравнивать его с експектед
V
Как ты собираешься тестировать строку?
V
И какова эффекттвность такого тестирования? Тестовые данные наглядны? Легко изменяемы?
антон
какая задача такие и данные
антон
сырая строчка достаточно наглядная
Maks
И какова эффекттвность такого тестирования? Тестовые данные наглядны? Легко изменяемы?
Легко изменяемы естественно. Ты даешь входные данные и експектед. В данном случае входных данных нет
Maks
Ты сравниваешь 2 строки, ожидаемую и ту что вернет метод
Maks
В чем там сложность
Maks
Это же обычный юнит тест
V
В чем там сложность
в том, что строка - нифига не легко изменяемый аргумент
V
ну или покажи пример ассерта
Maks
Мне лень за комп садиться. У тебя есть метод он возвращает строку. Ты сравниваешь строку которую вернул метод и строку которую ты ожидаешь.
Maks
Если метод изменится и будет сделан не верно то у тебя соответственно тест упадет
Maks
Я не понимаю в чем ты проблему увидел
Maks
И почему ты написал типо :сделай это на го, а теперь напиши тест. Чем это будет от того же питона отличаться?
V
Проблема - в херовом проектировании апи. Я хочу видеть промежуточный метод, складывающий числа в [n][n]int
антон
как это поможет тестам?
V
Потому что из массива [n][n]int можно слепить много чего, а из строки - ничего
V
как это поможет тестам?
Тестам не нужно помогать, тесты должны помогать. Промежуточная структура данных помогает разработке. Не конкретной мини-задаче, а в реальных проектах.
антон
как будет выглядеть наглядный тест для такого массива?
Maks
Так при чем тут проектирование и остальное))
Maks
При чем тут язык го
Maks
Вообще не понимаю
Maks
Что ты хочешь донести?
V
При том что если ты умеешь проектировать - ты проектируешь всегда и везде. Если ты не умеешь - выдаёшь фразы типа "по условиям задачи нужно напечатать строку, чё ты привязался"
Maks
Щас парни разберемся, главное правильно задать вопросы
V
Что ты хочешь донести?
То, что задача - как матрёшка, есть более глубокие уровни
V
При чем тут язык го
Чатик про го же
Maks
Зачем ты челу на мем написал напиши это на го? Это задача из разряда олимпиадных
антон
это называется преждевременная генерализация
Maks
Там важен еще и размер кода
Maks
И потребляемая память
Maks
И скорость исполнения
Maks
Важна так же скорость с которой ты решаешь задачу
Maks
Зачем мне проектировать что то для этой задачи? Зачем тратить деньги на то, о чем бизнес не просил?
V
как будет выглядеть наглядный тест для такого массива?
if spiral[3][3] != 1 { log.Fatal } if spiral[1][1] != 21 { log.Fatal } т.е. берём любую точку в массиве размерности 2 и проверяем на значение
Maks
Так а если у тебя другие значения не верные?
Maks
Или ты будешь весь массив проверять?
V
Зачем мне проектировать что то для этой задачи? Зачем тратить деньги на то, о чем бизнес не просил?
Потому что бизнесу крайне часто нужно масштабировать логику и очень редко уменьшить размер кода или время исполнения
V
Или ты будешь весь массив проверять?
Весь - это сколько? 1000х1000? Если массив маленький - его можно конвертнуть в строку, например так if `21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13` != to_string(spiral(25)) { log.Fatal("Wrong spiral") } но это должен быть дополнительный тест, потому что нужна промежуточная структура данных
Maks
Суть не в этом. Суть в том что тебе в тесте придется проверить каждое значение
Maks
Абсолютно
Maks
Что бы доказать что программа работает верно
Maks
И что если у тебя по спирали, но ты не знаешь первое значение и шаг?
Maks
И чем же это лучше чем проверять строку
Maks
Строка гораздо нагляднее будет))))) там сразу видно глазу что числа идут по спирали, что они верный порядок имеют, что они правильно закручены
Maks
Твой метод ничем не лучше и не является итоговым трестирующим требуемый функционал
Maks
Требуемый функционал - вывод текста. По этому и проверять нужно вывод текста
Maks
А внутренние методы скрываешь
Maks
А там уже хочешь массив верни в промежутке где то, хочешь еще что то
V
Для большинства программ это в принципе недоказуемо
V
У тестов нет задачи формально верифицировать программу
Maks
Задача юнит теста показать что метод работает правильно при граничных, не верных и верных значениях
V
Задача тестов - помощь в итеративной разработке и регрессионный контроль
Maks
Если диапазон тестируемых данных плохой это проблема тз или тестировщика же
V
Ты и a + b тестами никак на корректность не проверишь
V
Если диапазон тестируемых данных плохой это проблема тз или тестировщика же
ну а чё ты начал эту тюльку про полное тестирование раз в курсе что тестирование возможно только на определённых диапазонах входных значений?
Maks
Можно написать сначала тесты а потом код, и ты будешь знать что на большинство учтенных значений работает все ок
V
Строка гораздо нагляднее будет))))) там сразу видно глазу что числа идут по спирали, что они верный порядок имеют, что они правильно закручены
Метод, отдающий сразу строку, нарушает SRP. Он делает И логическое представление в виде спирали, И форматирование результата. И потому его сложно тестировать, хоть тебе строка и кажется наглядной. Возможные проблемы? Ну например тебе завтра понадобится показывать не числа, а их квадраты в той же спирали. Или выводить в html вместо текста. Или куда-нибудь в апиху скармливать, 2022й год уже на календаре.
антон
или не понадобится никогда
антон
вместо решения задачи напишите фреймворк
V
Прежде чем учиться не программировать лишнего сперва нужно научиться программировать. Тогда ты сможешь на лету и адекватно решать что нужно делать, а что нет.
антон
если это тестовая задача, очевидно, что улучшать её не потребуется