
ojab
29.10.2016
15:21:32
а, в смысле в итоговых доках?

Alex
29.10.2016
15:21:35
Угу.
Нет смысла дважды плодить одно и тоже описание.
Я тут велосипед изобрел, хочу спросить это нормальная практика так тестировать protected методы?
https://gist.github.com/Fedcomp/161b06df8883ff19830b2b84159a3a45

Google

Антон
29.10.2016
17:10:40
хороший вопрос
народ не любит тестировать private/protected методы
я тестирую через expect(subject.send(:method))

I
29.10.2016
17:11:48
А разве code coverage не по всем методам считается?

Антон
29.10.2016
17:12:02
coverage - заблуждение
ну у тебя coverage посчитает
а фактически метод может принимать два состояния например
а протесииовано одно

Alex
29.10.2016
17:12:44
О, надо на send перепилить.
coverage - метрика. Ко всем метрикам надо относиться со здоровым скептицизмом.

Антон
29.10.2016
17:13:21

Alex
29.10.2016
17:14:57
Я кстати тоже не вижу смысл тестировать private метод. Но protected - часть апишки.
а private только bdd только хардкор

Антон
29.10.2016
17:15:28
ну у тебя private тоже метод, хочешь ты этого или нет
значет тебе сверху надо спускать исчерпывающие данные

Google

Alex
29.10.2016
17:17:00
Так тестировать надо только апишку
если у тебя метод недоступен как публичное или полупубличное (protected) апи то это просто часть реализации, и напрямую не тестируется.

Антон
29.10.2016
17:17:46
а почему бы не протестировать

Alex
29.10.2016
17:17:47
Ну и прогонять все через mutant - никакое тестовое покрытие не выдержит.

Антон
29.10.2016
17:17:50
фак зе систем

Alex
29.10.2016
17:17:54
Зачем тестировать внутреннюю реализацию.
сегодня одна, завтра другая.

Антон
29.10.2016
17:18:36
просто это может оказаться долго

Alex
29.10.2016
17:19:02
Тестовое покрытие должно тестировать все предусмотренные кейсы.
Многие кейсы просто на практике не будут встречаться имхо конечно.
А большое тестовое покрытие тоже стоит трудозатрат на поддержку.

Антон
29.10.2016
17:19:45
дело же не в этом
просто ты написал hash['key'] а ключа нет, а тесты проходят потому что stub
кто-то полезет рефакторить и сломает все к херам

Alex
29.10.2016
17:20:24
Это уже моки vs интеграционные тесты.

Google

Антон
29.10.2016
17:20:45
покрытие может быть 100%

Alex
29.10.2016
17:20:55
Это метрика.

Антон
29.10.2016
17:21:01
просто вместо hash['key'] надо стараться писать hash.fetch('key')
hash.fetch('key') не мутирует

Alex
29.10.2016
17:21:20
Я например .dig юзаю

Антон
29.10.2016
17:21:33
так мутант тебе очень много нового о тебе расскажет
мутант не для того чтобы было больше тестов
а для того чтобы было меньше мутаций

Alex
29.10.2016
17:22:21
Да, я уже читал про мутационное тестирование еще полгода назад. Но многие кейсы на практике не возникнут, а большое тестовое покрытие замедляет рефакторинг/внедрение фич.

Антон
29.10.2016
17:23:11
а ты попользуйся мутантом
у меня не хватит буков чтобы рассказать
чотам пользоваться mutant —use rspec Class

Alex
29.10.2016
17:23:30
Ну я в общих чертах представляю как оно будет выглядеть.
Надо будет перед релизом гема прогнать ?

Антон
29.10.2016
17:24:00
ооо
будет уже поздно

Alex
29.10.2016
17:24:16
Там примитивный гем же.

Антон
29.10.2016
17:24:20
написакл класс? протестировал? прогони мутанта

Alex
29.10.2016
17:24:40
он разве не дает много false positives?

Антон
29.10.2016
17:24:57
нет

Google

Антон
29.10.2016
17:25:01
не много
я какие-то мутации игнорирую конечно
какие-то очевидно нужно тестами покрывать
какие-то мутации рефакторятся

Alex
29.10.2016
17:25:51
Окей посмотрю, спасибо.

Антон
29.10.2016
18:37:45
поставили новую макось?

Денис
29.10.2016
18:39:39
бгг
там не собирается grpc, рано ещё обновляться

Иван
29.10.2016
19:10:53
подскажите можно ли как то отслеживать создание синглтона класса. Хотелось бы выводить в консоль сообщение о том что такой-то синглтон класс создался

Alex
29.10.2016
19:11:15
Что значит синглтон создался?

Admin
ERROR: S client not available

Иван
29.10.2016
19:12:03
inherited хук в классе Object работать не хочет
или псоле создания метода класса

Alex
29.10.2016
19:14:39
а смысл отлавливать это дело?

Иван
29.10.2016
19:15:33
ну мне интересно, создается ли синглтон класс у объекта после вызова любого метода
да и еще интересно почему inhereted хук в Object классе не работает. Синглтон класс ведь наследуется от Object в любом случае

Alex
29.10.2016
19:35:23
покажи хук

Иван
29.10.2016
19:36:29
class Object
def self.inherited(child_class)
puts "#{child_class} created"
end
end
ну при создании обычных классов он срабатывает, а вот синглтон не цепляет

Google

Alex
29.10.2016
19:37:17
Тут или в соседнем чате была дискуссия про lookup
где писалось что руби ищет сначала метод в базовом object а затем уже идет по цепочке, но я хз.

Иван
29.10.2016
19:38:10
так я эту дисскусию и начал
ты про method lookup?

Alex
29.10.2016
19:39:44
да

Иван
29.10.2016
19:40:24
в начале ruby идет в синглтон класс объекта
и если его нет, он видимо его создает, я это проверить и хотел

Alex
29.10.2016
19:40:57
эм стоп
а разве он его не создает сразу при определении?

Иван
29.10.2016
19:41:40
при создании объекта?

Alex
29.10.2016
19:41:46
Вот ты объявил класс
теперь интерпритатор запустился и прошелся по файлу, теперь у него есть этот синглтон в памяти. Нет?

Иван
29.10.2016
19:43:27
смотри есть у меня объект любой неапример o = Object.new
когда я на этом обхекте вызову метод любой, например o.bla
руби должен сходить в синглтон класс объекта o
в какой момент он его создаст
?

Alex
29.10.2016
19:44:23
При прочтении объявления?
к моменту когда ты сделаешь Object.new синглтон Object уже существует

Иван
29.10.2016
19:45:11
синглтон не Object, а именно o

Alex
29.10.2016
19:45:26
o не синглтон а экземпляр класса.
Синглтон это класс хранящий состояние
а класс и инстанс класса это два разных понятия.