Size: a a a

2020 May 05

АП

Александр Попов... in Go-go!
Daniel Podolsky
как так получается, что мне ни разу не понадобился дебагер с 2001 года?..
так же как и мне не понадобились бинарные сдвиги с 2001 года? :)
источник

М

Мерль🛠 in Go-go!
Daniel Podolsky
как так получается, что мне ни разу не понадобился дебагер с 2001 года?..
Ограниченный опыт либо скилл дебагать конкурентный код в голове, которого у меня нет
источник

DP

Daniel Podolsky in Go-go!
ну вот или функция чистая, или она использует интерфейсы, так должно быть. иначе хрен ее потестишь
источник

AK

Anton Kucherov in Go-go!
Мимо Проходящий
потому что есть property based  + table driven тестирование, которое точно такое же модульное, как и тестирование на основе моков?
Вот тут я не очень понимаю. table driven - это инструмент который позволяет подставить разные значения и запустить с ними один и тот же тест, вне зависимости от того, интеграционный он или юнит. Как эти вещи вообще связаны?
источник

М

Мерль🛠 in Go-go!
Daniel Podolsky
ну вот или функция чистая, или она использует интерфейсы, так должно быть. иначе хрен ее потестишь
Не всегда
Возьмите любой rate limiter например

Там сразу появляется разделённое состояние
источник

DP

Daniel Podolsky in Go-go!
Мерль🛠
Ограниченный опыт либо скилл дебагать конкурентный код в голове, которого у меня нет
у меня как раз нет скила дебажить дебагером конкурентный код. но я надеюсь и дальше обходиться :)

вот скажи - что именно ты отлавливал, и как дебагер применял?
источник

AK

Anton Kucherov in Go-go!
Мимо Проходящий
с этим я согласен конечно, в моках может быть что угодно, в т.ч. проверка по таблице или quick check Ну так не все же функции и алгоритмы используют интерфейсы, а тестировать надо все
Так, стоп. внутри моков (в имплементации моков) никаких проверок нет и быть не должно. Это что-то новенькое. Я о таком слышу впервые.
источник

DP

Daniel Podolsky in Go-go!
Мерль🛠
Не всегда
Возьмите любой rate limiter например

Там сразу появляется разделённое состояние
я недавно писал рейт-лимитер, и тестил, и все, что мне было нужно - это замокать net.Conn
источник

МП

Мимо Проходящий... in Go-go!
Anton Kucherov
Так, стоп. внутри моков (в имплементации моков) никаких проверок нет и быть не должно. Это что-то новенькое. Я о таком слышу впервые.
ок, не проверки - но сами таблицы или quick генераторы
источник

М

Мерль🛠 in Go-go!
Daniel Podolsky
у меня как раз нет скила дебажить дебагером конкурентный код. но я надеюсь и дальше обходиться :)

вот скажи - что именно ты отлавливал, и как дебагер применял?
Надо было пофиксить нетривиальный websocket контроллер


Я повесил прерывание на методы net.Pipe и отслеживал состояние соединения внутри теста, прощёлкивая автомат состояний руками
источник

М

Мерль🛠 in Go-go!
Очень удобно
источник

AK

Anton Kucherov in Go-go!
Мимо Проходящий
ок, не проверки - но сами таблицы или quick генераторы
Погодите, давайте тогда определимся с тем, что же такое мок. Кажется здесь у нас определения расходятся.
Для меня мок - это объект который имитирует поведение реального объекта но при этом его поведение можно сконфигурировать под каждый тест кейс. Там внутри мока не должно быть ничего связанного с тестами или с тестовым окружением.
источник

МП

Мимо Проходящий... in Go-go!
Anton Kucherov
Вот тут я не очень понимаю. table driven - это инструмент который позволяет подставить разные значения и запустить с ними один и тот же тест, вне зависимости от того, интеграционный он или юнит. Как эти вещи вообще связаны?
а что тут не понятного? есть тестируемая функция, есть таблица по которой тетс выполняется, никаких моков нет - это что, не модульное тестирование по вашему?
источник

DP

Daniel Podolsky in Go-go!
Мерль🛠
Надо было пофиксить нетривиальный websocket контроллер


Я повесил прерывание на методы net.Pipe и отслеживал состояние соединения внутри теста, прощёлкивая автомат состояний руками
вот я бы поленился щелкать руками и смотреть глазами, а навставлял бы логов, и написал бы тестов, которые бы проверяли корректность
источник

AK

Anton Kucherov in Go-go!
Мимо Проходящий
а что тут не понятного? есть тестируемая функция, есть таблица по которой тетс выполняется, никаких моков нет - это что, не модульное тестирование по вашему?
Тут непонятно, как это связано вообще с моками. Если тестируемая функция не чистая и зависимости в ней не замоканы, это интеграционный тест. Если замоканы зависиомсти или функция чистая, юнит тест. Но таблица по которой запускаются тесты какое вообще отношение к этому имеет? И те и другие тесты вы запускать можете используя таблицу с входами, выходами и конфигурацией
источник

DP

Daniel Podolsky in Go-go!
тем более, что тесты мне нужны так и сяк
источник

М

Мерль🛠 in Go-go!
Daniel Podolsky
вот я бы поленился щелкать руками и смотреть глазами, а навставлял бы логов, и написал бы тестов, которые бы проверяли корректность
Ну вот, а мне лень принты записывать, поэтому я просто посмотрел на стек вызова нужного метода и сразу понял где засада)
источник

М

Мерль🛠 in Go-go!
Это те же самые принты, только автоматические
источник

М

Мерль🛠 in Go-go!
Daniel Podolsky
тем более, что тесты мне нужны так и сяк
Разумеется

Дебаг – это не замена тестов, это отличное к ним дополнение
источник

МП

Мимо Проходящий... in Go-go!
Anton Kucherov
Тут непонятно, как это связано вообще с моками. Если тестируемая функция не чистая и зависимости в ней не замоканы, это интеграционный тест. Если замоканы зависиомсти или функция чистая, юнит тест. Но таблица по которой запускаются тесты какое вообще отношение к этому имеет? И те и другие тесты вы запускать можете используя таблицу с входами, выходами и конфигурацией
"Если тестируемая функция не чистая и зависимости в ней не замоканы, это интеграционный тест." - это вообще не тест а чёрт знает что. Я естественно о чистых функциях говорю, а не о тех, которые принимают интерфейсы. вроде бы уже уточнял
источник