і64
Спасибо
Brommie
наверное, нет так выразился про сущности)
aadz
хотя, func (t MyTime) DayBefore() MyTime это вполне себе метод. Но заключается в том, что `return time.Duration(84_килосекунды) * time.Second
aadz
Есть ли смысл огород городить?
aadz
почему тогда именно в гочате)?
Вот до таких размышлений UNIX пользователей доводит. Это не продвинутый пользователь винды тебе! :)
aadz
ужос кокой!
Brommie
Есть ли смысл огород городить?
сахар всегда вкусный)
aadz
не всегда :(
Dmitry
кто пользуется gb, вы делаете мейкфейл чтобы этот гб поставить?
Илья
да
Dmitry
да
можно глянуть?
Илья
под рукой нет, давно gb не пользую
Илья
можно глянуть?
но суть простая go_dep := $(go_path)/bin/dep $(go_dep): $(go_path) go get -u github.com/golang/dep/cmd/dep
Илья
меняешь на gb :) и вот собранный gb у тебя будет
andrew
День добрый. Пытаюсь тестировать приложение, структура приложения такая: - src - tests Соответственно пакет main и пакет tests, в тестах пытаюсь импортировать main но получаю ошибку import "../src" is a program, not an importable package Есть ли какой-то способ не совмещать файлы тестов и самой программы? Либо каким образом можно в тесты прокинуть структуры и функции из main?
Dmitry
но суть простая go_dep := $(go_path)/bin/dep $(go_dep): $(go_path) go get -u github.com/golang/dep/cmd/dep
ну просто я сделаю вот сначала go get github.com/constabulary/gb/... потом мне надо будет его собрать и бинарь кинуть куда то в /usr/bin там или что-то вроде этого
Dmitry
так?
Илья
если ты про ci - то в go_path/bin собираешь и его в path добавляешь
Илья
хотя и не про ci аналогичный совет
Dmitry
если ты про ci - то в go_path/bin собираешь и его в path добавляешь
ну я просто хочу чтобы можно было сделать make install и ничего предварительно не ставить
Artem
это как? вынести все из main package?
https://github.com/golang-standards/project-layout
andrew
https://github.com/golang-standards/project-layout
кажись понял, а как тогда тестить сам main.go, интеграционные тесты например?
Andrei 🦉
кажись понял, а как тогда тестить сам main.go, интеграционные тесты например?
компилировать бинарь, запускать приложение и тестировать чем-нибудь извне, в папке test должны лежать только unit тесты
Artem
Но остальное так
Artem
Юнит как раз лучше рядом класть, так ты сможешь тестить не только публичные, но и привытные функции
andrew
значит в тестс создам 2 папки, для юнит тестов и для интеграционных
Artem
Не надо тестить приватные
и микросервисы которые не торчат наружу тоже не надо?
Daniel
Микросерисы - это не юнит-тесты
Artem
Не надо тестить приватные
Я пропустил возможно, но почему не надо ?
Roman
Не надо тестить приватные
зависит от того что написано.. но я бы и приватные проверял, в них тоже баг может запрятаться
Anonymous
Я пропустил возможно, но почему не надо ?
Потому что юниты должны покрывать интерфейс а не детали реализации. Единственное о чем можно парится это о степени покрытия.
Roman
Потому что юниты должны покрывать интерфейс а не детали реализации. Единственное о чем можно парится это о степени покрытия.
юнит тесты вообще-то должны дать вам уверенность в том, что написанный код функционирует корректно. Добиться этого можно только 100% (в идеале) покрытием тестами. Если некоторые внутренние функции по какой-либо причине не покрываются тестами экспортированных функций, вы по прежнему уверены что код корректен?
Sergey
100% покрытие тестами это то ещё дерьмо...
Artem
Потому что юниты должны покрывать интерфейс а не детали реализации. Единственное о чем можно парится это о степени покрытия.
В случае если у вас два ошибочных метода в сумме дают верный результат. Вам тест интерфейса будет говорить что все хорошо. А тесты приватных, что есть ошибка.
Anonymous
Так или иначе есть код, который использует приватные функции. С их помощью и можно добиться 100% покрытия
Vasilii
да, прям очень важно покрыть тестами кусок кода if err != nil { panic(err) }
Vasilii
без этого никогда не будешь уверенным
Daniel
Юнит-тесты нужны только для одного: убедиться, что модуль соблюдает интерфейс (в широком смысле)
Roman
Ну чушь же. Для начала - в тестах тоже есть ошибки
это уже утверждение на тему "who tests the unit tests?". Начинать надо с того, что тесты должны быть максимально простыми, дабы в них не допускать ошибок. Если спонтанно взять числа с потолка основываясь на интуиции то у меня где-то 50% вероятность допущения ошибки в коде и 5-10% в тесте
Anonymous
Ясно. В го по видимому свои правила покрытия приватных и публичных функций. Хотелось бы посмотреть как вы пишите тесты для Java или php. Через рефлексию?
Daniel
В go те же правила, что везде
Roman
100% покрытие тестами это то ещё дерьмо...
поэтому я и добавил в скобках (в идеале). Идеала как известно обычно мы не достигаем, потому-что он зачастую и не нужен. Главное протестировать все острые угли об которые можно случайно порезаться
Roman
100% покрытие тестами это не идеал
0% покрытия тестами это идеал)
Roman
и к нему надо стремиться))))
Anonymous
да, кстати
Вы же в курсе что есть «ожидаемое поведение»?
Kirill
а вы протестировали свои тесты?
Anonymous
а вы уже осознали бесполезность тестов?
Sergey
0% покрытия тестами это идеал)
0% это только для истинных ниндзицу, познавших мастерство кунг фу
Anonymous
Как можно пропустить такой кейс если полностью в тесте контролируется выполнение?
Roman
а вы уже осознали бесполезность тестов?
да, настолько что добровольно трачу время на тщательное тестирование. Они настолько бесполезны что неоднократно спасли мне жопу в жизни))
Anonymous
В том числе поведение приватных функций.
Artem
В го тестирование это чёрный ящик, данные на входе и результат на выходе, в большинстве случаев. Где тут контролируемое выполнение ?
Anonymous
Всем привет помоги со свагерром ставлю на мак ось - не хочет работать ставлю так brew cask install homebrew/cask-versions/java8 brew install swagger-codegen далее пытаюсь выполнить команду swagger-codegen generate server -f example.yaml -t test и получаю Exception in thread "main" io.airlift.airline.ParseArgumentsUnexpectedException: Found unexpected parameters: [server, -f, example.yaml] at io.airlift.airline.Cli.validate(Cli.java:148) at io.airlift.airline.Cli.parse(Cli.java:116) at io.airlift.airline.Cli.parse(Cli.java:97) at io.swagger.codegen.SwaggerCodegen.main(SwaggerCodegen.java:35)
Artem
Ну может в других языках иначе, и там переменные на лету подменяются
Artem
В го я не ощущаю контроля над выполняем теста, что можно опускать тестирование приватных методов
koorkoole
В го я не ощущаю контроля над выполняем теста, что можно опускать тестирование приватных методов
Если у вас тестирование экспортируемых методов затрагивает работу приватных и никакого хитрого внутреннего стейта нет, то зачем тестить эти приватные методы?
aadz
Тестируй не тестируй программно, а все равно в серьезных контонрах дошли до того, что держат тестировщиков. И да, они правы!
Roman
у вас может быть коллективная ошибка, которую может раскрыть тест отдельных приватных функций. Но это всё сильно зависит от ситуации.
aadz
главное, чтобы тестировщик этого кода не писал, а только тестировал! Чтобы думал не как "писатель"
Roman
Тестируй не тестируй программно, а все равно в серьезных контонрах дошли до того, что держат тестировщиков. И да, они правы!
нужны и тестировщики и автоматизированные acceptence тесты и unit тесты и CI. Вопрос лишь в желании быть уверенным в своём коде
aadz
В Go нет приватных методов. Просто хочешь сделать черный ящик - сделай. И все. Никаких приватных методов нет.
Anonymous
со свагерром не работаете?
aadz
мы?