|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Добрый день, подскажите, если у класса есть private метод, как его можно протестировать при помощи JUnit. Можно наверное его сделать public, состояние класса он не меняет и ничего страшного, но вот нигде кроме этого класса этот метод не нужен и хочется как-то иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2021, 12:17 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Если кратко - не надо тестировать private методы. Подробнее написано в куче мест, например: https://anthonysciamanna.com/2016/02/14/should-private-methods-be-tested.html ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2021, 12:28 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Но если все-таки захочется открыть метод, то его не обязательно делать public. Он может остаться package private ибо тесты обычно помещаются в тот же пакет что и тестируемые классы. Ну еще есть вариант Reflection конечно, но выглядеть такой тест будет так себе :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2021, 15:41 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Конечно не надо тестировать private-методы. Если вы - owner кода - то сделайте его хотя-бы видимым в области пакета. Если код не ваш и чужой то тем более не стоит тестировать. Его владалец может в новой версии удалить этот метод и что вы будете с этим фактом делать. Я думаю что тема технически перекликается с модульностью (java9-modules) и обсуждать ее надо именно в таком ключе. Не ломать и хачить приватное, а разбираться почему вообще этот метод приватный и что за функционал от него нам понадобилось тестировать, и компетентны ли МЫ вообще брать информацию из чего-то внутреннего и закрытого от спецификаций. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2021, 16:22 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
если хочешь тестировать private методы- самое верное решение сделать из package private то есть в сигнатуре метода просто убрать модификатор доступа далее просто сгенерировать тесты на нужный класс- автоматом создаться пакет - в котором эти методы будут видны ну и извне эти методы не буду видны,как и private- тоесть безопасность не пострадает ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 19:40 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Конечно не надо тестировать private-методы. тут ты не прав- по факту все методы в коде private- кроме тех,что торчат на контроллерах- и все это нужно тестировать поэтому такие ситуации обыгрываются как package-private а тестировать надо обязательно иначе на прод будет уезжать то,чего вы не ждали ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 19:48 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 mayton Конечно не надо тестировать private-методы. тут ты не прав- по факту все методы в коде private- кроме тех,что торчат на контроллерах- и все это нужно тестировать поэтому такие ситуации обыгрываются как package-private а тестировать надо обязательно иначе на прод будет уезжать то,чего вы не ждали Приведи пример кода где тебе очень-очень нужно тестировать что-то приватное. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 20:21 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton, легко- те же самые маперы ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 22:00 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Все равно непонятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 23:47 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Вот решил попробовать Junit 5 и там уже кстати вроде разрешили тестить private методы. Хотя на своем примеры сам натолкнулся на то, что это не ОК, когда передал на вход ф-ии некорректные данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 12:18 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Должен быть принцип тестирования ящика. Подал а вход что-то. Проверил на выходе нечто. А если тебе надо взломать ящик - то тут... вроде как декомпозиция была сделана неверно. Тоесть тут уже либо SingleResp/OpenClosed либо взламывай private но тогда не жалуйся что плохое ООП. Абсурд получается. С одной стороны на каждом собесе тебя спросят зачем нужно сокрытие и с другой стороны ты сам-же пытаешся его нарушить в тестах. А тесты - это иммитация эксплуатации системы. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 12:29 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
da17, Дай пример метода и пример кода. Ведь он никому больше в ИС не нужен кроме этого класса? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 12:48 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, а я подумал и понял идею о том, что не надо тестировать private методы. Если еще смогу придумать зачем это надо, пока все понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 12:54 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79 пропущено... тут ты не прав- по факту все методы в коде private- кроме тех,что торчат на контроллерах- и все это нужно тестировать поэтому такие ситуации обыгрываются как package-private а тестировать надо обязательно иначе на прод будет уезжать то,чего вы не ждали Приведи пример кода где тебе очень-очень нужно тестировать что-то приватное. имхо если хочется приватное что то тестировать то мне в скале нравится подход с хелпер объектами. ну или в джавке - статические методы в классе который не инстанциируется. оч круто. я иногда так делаю и основной класс чище получается и потестить что то этакое можно. опять же оставляем хотя бы пакадж прайват. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 16:40 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 mayton Конечно не надо тестировать private-методы. тут ты не прав- по факту все методы в коде private- кроме тех,что торчат на контроллерах- и все это нужно тестировать поэтому такие ситуации обыгрываются как package-private а тестировать надо обязательно иначе на прод будет уезжать то,чего вы не ждали так тестируй публичный метод который эти прайваты использует. или ты хочешь тестировать прайват методы в классе где никаких других кроме прайватов нет? :) и конструктар тоже прайват? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 16:41 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
da17PetroNotC Sharp, а я подумал и понял идею о том, что не надо тестировать private методы. Если еще смогу придумать зачем это надо, пока все понял. Это ни зачем и никогда не надо. Eсли класс нельзя на 100% покрыть тестами через его не приватный интерфейс - у тебя плохой дизайн класса. всегда. без исключений. Cледствия: 1. если без PowerMock никак, то что не так 2. если в классе надо ослаблять видимость (например с private на package-private) только ради тестирования, то что-то не так 3. да, именно поэтому, Dependency Injection всегда и только - через конструктор 4. да, именно поэтому, private @PostConstruct/@PostLoad и т.п. - отвратительный anti-pattern которого надо избегать любой ценой 5. вообще любой вид инъекции в приватные поля и или методы - фу таким быть. И то что так можно даже в родных API (JPA, JAXB и т.д.) не оправдание ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 14:40 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Да и есть хорошее правило что код должен быть - testable by design изначально. Mockito/PowerMock - играют на особенностях ООП в Java но в то-же время противоречат идеям ООП в принципе. Поэтому их нельзя считать "честным" тестированием. Тоже самое что если-бы С++ делали reinterpret_cast или что-то подобное по отношению к инкапсулируемым полям. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 15:17 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
gmugar Eсли класс нельзя на 100% покрыть тестами через его не приватный интерфейс - у тебя плохой дизайн класса. всегда. без исключений. Реальный пример: есть робот который умеет переливать жидкость из пробирок в другие пробирки. Одна из команд представленна в виде: ВсосатьЖидкость(сколько, откуда, еще доп параметры) . Робот принимает на вход CSV, соответственно классу нужен только один публичный метод: toCsv(). Но в тестах парсить CSV для проверки расчетов очень не удобно из-за чего приходится открывать кой-какие внутренности. А некоторые вещи тестировать через public API в принципе невозможно. Например, мы не можем протестировать в какой момент HashMap делает rehashing, хотя это обязательная составляющая алгоритма без которой весь класс превращается в тыкву. В общем и целом вопреки всеобщему убеждению - тесты по большей части ухудшают дизайн нашего приложения, делая его более гибким (и соответственно сложным) без надобности, ну и открывая внутренности когда не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 17:23 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
В данном топике речь идет о тестах на correctness. Здесь мы проверяем бизнес сценарии использования компонентов. Тесты перформанса (в т.ч) с использованием JMH - это отдельная и сложная тема. Они настолько не похожи на тесты корректности что я-бы их даже не объединял. В проектах для них создают отдельные группы тестирования и заводят отдельные фазы CI. Вообще занятие задачами перформанса - последовательно "калечит код". Это фраза Шипилева. Он даже рисовал кривую качества кода / перформанса и эта гривая имеля ярко выраженный экстремум. Тоесть была точка где и код красив и перформанс - более-менее и дальше чтоб хоть немножко (на 2-3%) поднять speed-up нужно было сломать 50% кода и сделать его нечитабельным и неудобным к использованию. Появляются работы с byte[], char[], c пакетом unsafe e.t.c. Яркий пример - BlockingQueue и Disruptor. Если их сравнивать по способу использования то видно что первый - удобен а второй нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 17:49 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav BashkyrtsevЛогику очень часть неудобно покрывать через public интерфейс. Потому как наружу класс может отдавать только конечные результаты вычислений, а нам удобней протестировать сначала промежуточные результаты. В итоге нам приходится идти на поводу у тестов ухудшая дизайн: разбивать логику на доп классы или же открывать какие-то методы. Реальный пример: есть робот который умеет переливать жидкость из пробирок в другие пробирки. Одна из команд представленна в виде: ВсосатьЖидкость(сколько, откуда, еще доп параметры). Робот принимает на вход CSV, соответственно классу нужен только один публичный метод: toCsv(). Но в тестах парсить CSV для проверки расчетов очень не удобно из-за чего приходится открывать кой-какие внутренности. Это вот как раз и есть то, как делать нельзя. Никогда. Вы тут фактически сказали "мне не удобно тестировать через честное паблик API класса, поэтому я буду срезать углы". Тем самым закладываются сразу две мины: 1. вы протестировали класс не так как он будет реально использоваться. 2. вы подставили людей, которые при рефакторинге private кишок класса, напорятся на какие-то странные тесты. Да, бывает протестировать класс сложнее чем его написать. Да, бывает что тесты в разы больше по размеру, чем собственно лигика которую тестируют. И наконец, если написать тест реально сдожно, это, опять же, яркий сигнал, что что-то не так с дизаном класса. Но тестировать приваты - это не номральный путь. В нормальном проекте такое никогда не пройдет code review. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 19:46 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
maytonТесты перформанса (в т.ч) с использованием JMH - это отдельная и сложная тема.Я ничего не говорил про JMH и пр. Я не хочу сравнивать две реализации хеш таблиц, я хочу убедиться что свою хеш таблицу с external chaining'ом я реализовал правильно . Т.е. что сам алгоритм написан by the book. И это было бы легко сделать, если бы бакеты были доступны в тестах. Однако это нарушение инкапсуляции. gmugarЭто вот как раз и есть то, как делать нельзя. Никогда.Сразу видно что веду дискуссию с опытным человеком :) gmugar1. вы протестировали класс не так как он будет реально использоваться.Я протестирую его и через public API тоже. Но таких тестов я напишу меньше потому как мне останется проверить лишь то что в строку все собирается верно. А саму математику я смогу протестировать нарушив инкапсуляцию. gmugar2. вы подставили людей, которые при рефакторинге private кишок класса, напорятся на какие-то странные тесты.В сложность создания и поддержки проекта входит как написание prod, так и тестового кода. Если мне при рефакторинге прийдется порефакторить так же тесты и я потрачу на это дополнительных 10 мин, я не буду сильно переживать. А если моему коллеге прийдется потратить доп день на написание сложных тестов в которых еще попробуй разберись потом, то не уверен что оценю этот труд. В какой-то момент эти тесты тоже прийдется рефакторить, а т.к. они будут сложными, то этот рефакторинг опять же усложнится. gmugarИ наконец, если написать тест реально сдожно, это, опять же, яркий сигнал, что что-то не так с дизаном класса.Это уже какое-то новое правило, я тут идею не совсем понял. Почему сложные тесты - это сигнал плохого дизайна? Я видел много простых тестов в ужасных проектах. И там же видел много сложных тестов. И в хороших проектах видел и те, и другие. В общем не замечал пока никакой корреляции. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 23:10 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev maytonТесты перформанса (в т.ч) с использованием JMH - это отдельная и сложная тема. Я понял ваш месседж. Я просто добавлю что есть некое промышленное тестирование качества бизнес-логики которому вполне достаточно протестировать чёрный ящик. Если ящика по каким-то причинам не достаточно - то его выбрасывают и берут другой ящик или декомпозицию на несколько более мелких. То о чем рассказываете вы насколько далекО от тестинга качества бизнес-логики что его можно просто выделить в одельную категорию и отменить для нее законы ООП. В самом деле. Зачем вам ООП когда вы создаете свою структуру данных. Вот создайте ее. Доработайте до конца. И после этого уже займитесь инкапсуляцией. Это будет в духе SingleResp/OpenClosed. Вот такое вот IMHO. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 00:07 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav BashkyrtsevЯ протестирую его и через public API тоже. Но таких тестов я напишу меньше потому как мне останется проверить лишь то что в строку все собирается верно. А саму математику я смогу протестировать нарушив инкапсуляцию. При всем уважении, я вашу аргументацию не понимаю и не принимаю. Если для вас нарушение инкапсуляции это нормально - то мы в разных мирах. Вы, уже несколько раз написали, что (в вашем примере) так делается потому что через public API тестировать сложно. Но с каких пор "сложно" стало аргументом в пользу нарушения инкапсуляции? это аргумент ровно в пользу того, что надо что-то менять чтобы сложно не было. Stanislav BashkyrtsevА если моему коллеге придется потратить доп день на написание сложных тестов в которых еще попробуй разберись потом ну так не делайте такие тесты. меняйте дизайн. да хоть декомпозицию тут же применяйте. чтобы все это было легко тестировать и тесты были просты и понятны (что, безусловно, важно, потому что тест, это еще и документация для тестируемого метода) возвращаюсь к вашему примеру с роботом. мне отсюда конечно сложно судить, но я бы это просто на два класса разбил: 1. класс который делает расчеты и возвращает их в виде какой-то "простотестируемой" структуры данных 2. класс который по этой структуре данных генерирует CSV Stanislav BashkyrtsevЭто уже какое-то новое правило, я тут идею не совсем понял. Почему сложные тесты - это сигнал плохого дизайна? Я видел много простых тестов в ужасных проектах. И там же видел много сложных тестов. И в хороших проектах видел и те, и другие. В общем не замечал пока никакой корреляции. мой опыт как раз обычно четко показывал эту зависимость. к самим unit test-ам обычно предъявляют ряд требований. как минимум: Stateless, Easy to write, Readable, Reliable, Fast, "unit, but not integration". и логика дальше простая: если тест не соответствуют требованиям - менять тест, чтобы соответсвовал если привести в соответствие не удается из-за тестируемого кода - менять код, чтобы тест соответсвовал отсюда появляется понятие Untestable Code и разные проистекающие из этого понятия anti-patters. "Unit tests also aid the design" (c) Robert C. Martin (Uncle Bob) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 11:32 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
gmugarПри всем уважении, я вашу аргументацию не понимаю и не принимаю.Я не удивлен :) gmugarЕсли для вас нарушение инкапсуляции это нормально - то мы в разных мирах.Инкапсуляция, как и другие принципы - они не просто из ниоткуда пришли. Если не следовать этим принципам слепо, а понимать зачем и почему, то появляется намного больше вариантов решения проблем. Потому как теперь мы можем взвешивать что хуже: соблюсти этот принцип, но сделать что-то другое сложней. Либо нарушить принцип, но сделать что-то другое проще. Когда встает такой вопрос - мы в любом случае отхватываем проблем, осталось только решить какая из проблем дешевле. gmugarно я бы это просто на два класса разбил: 1. класс который делает расчеты и возвращает их в виде какой-то "простотестируемой" структуры данных 2. класс который по этой структуре данных генерирует CSVЯ ждал когда будет предложен этот вариант. Ведь именно он якобы решает все проблемы: и тестировать проще, и инкапсуляцию можем соблюдать. Но: 1. Если этот доп класс будет public, то тут два варианта: 1.а Мы его предаем в конструктор тому кто создает CSV. В таком случае мы усложнили клиентский код. Т.е. ради тестов мы усложнили прод код . 1.б Мы его создаем внутри класса который в итоге генерит CSV. И если мы их тестируем отдельно, то мы предполагаем что CSV класс использует класс вычислениями и тем самым опять же нарушаем инкапсуляцию. 2. Если этот доп класс будет package private, то: 2.а Мы все равно тестируем не Public API. Т.е. по сути это то же самое что тестировать не public метод. 2.б То же что и в 1.б gmugar"Unit tests also aid the design" (c) Robert C. Martin (Uncle Bob)Не верь всему что пишут на заборах. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 14:16 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, +++ gmugar Вы, уже несколько раз написали, что (в вашем примере) так делается потому что через public API тестировать сложно. Но с каких пор "сложно" стало аргументом в пользу нарушения инкапсуляции? А что есть инкапсуляция и что в ней настолько ценного, что ради нее нужно гланды череж ж... лечить? Если инкапсуляция мешает разработке, тестированию, использованию в продуктиве - да ну нафиг такую инкапсуляцию. Бизнес задачи писать/решать нужно, а не перед статуей инкапсуляции UML-диаграммы из распечатанных листингов выкладывать. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 14:24 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Stanislav Bashkyrtsev пропущено... Я ничего не говорил про JMH и пр. Я не хочу сравнивать две реализации хеш таблиц, я хочу убедиться что свою хеш таблицу с external chaining'ом я реализовал правильно . Т.е. что сам алгоритм написан by the book. И это было бы легко сделать, если бы бакеты были доступны в тестах. Однако это нарушение инкапсуляции. Я понял ваш месседж. Я просто добавлю что есть некое промышленное тестирование качества бизнес-логики которому вполне достаточно протестировать чёрный ящик. Если ящика по каким-то причинам не достаточно - то его выбрасывают и берут другой ящик или декомпозицию на несколько более мелких. То о чем рассказываете вы насколько далекО от тестинга качества бизнес-логики что его можно просто выделить в одельную категорию и отменить для нее законы ООП. В самом деле. Зачем вам ООП когда вы создаете свою структуру данных. Вот создайте ее. Доработайте до конца. И после этого уже займитесь инкапсуляцией. Это будет в духе SingleResp/OpenClosed. Вот такое вот IMHO. На мой взгляд - пример Stanislav Bashkyrtsev как раз таки достаточно близок к реальному миру. совет: "Зачем вам ООП когда вы создаете свою структуру данных. Вот создайте ее. Доработайте до конца. И после этого уже займитесь инкапсуляцией." На мой взгляд за гранью добра и зла. Не бывает програмного кода/структуры данных который один раз создали, заинкапсулировали и больше не дорабатывают/не трогают. Это даже не фантазии, а полный отрыв от реальности. Зачем после разработки заниматься инкапсуляцией - я вообще не понимаю. Да и модификатор доступа private то же не очень, чем мешает в реальной жизни замена private на protected - мне не сильно понятно. IMHO p.s. Что такое "SingleResp/OpenClosed" не знаю, фразы не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 14:31 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsevp.s. Что такое "SingleResp/OpenClosed" не знаю, фразы не понял. single-responsibility principle open–closed principle ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 15:06 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Спасибо. Да все верно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 15:15 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
gmugar open–closed principle "закрыты для изменения" на мой взгяд, совершенно плохое сочитание слов. Значения вкладываемое в open-closed сильно отличается от их обычное значение в русском языке и противоречит их восприятию с точки зрения инкапсуляции и/или областей видимости. private метод, который мешает/усложняет тестирование порожденных классов, как раз open-closed и противоречит IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 15:27 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev gmugar open–closed principle "закрыты для изменения" на мой взгяд, совершенно плохое сочитание слов. Значения вкладываемое в open-closed сильно отличается от их обычное значение в русском языке и противоречит их восприятию с точки зрения инкапсуляции и/или областей видимости. private метод, который мешает/усложняет тестирование порожденных классов, как раз open-closed и противоречит ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 15:40 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev private метод, который мешает/усложняет тестирование порожденных классов, как раз open-closed и противоречит IMHO Нужно на конкретном примере рассмотреть. Мне кажется - что если приватный метод имеет смысл только в контксте базового класса (хелпер, утилита) то нет смысла делать его protected т.к. его тело будет уже мешать производному классу. Впрочем, это философия. Весь SOLID - философия. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 16:11 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Если что, то я уже все уяснил. А вот мне еще хотелось бы уточнить у более опытных коллег, теперь для тестирования часто приходится переделывать интерфейсы классов. Например был класс B который использовался в классе A и нигде более. Что бы протестировать поведение класса А пришлось B выносить наружу и передавать в конструктор, иначе не сделаешь его мок-объектом. Как-то вот странно все это. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 18:12 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
andreykaT так тестируй публичный метод который эти прайваты использует. или ты хочешь тестировать прайват методы в классе где никаких других кроме прайватов нет? :) и конструктар тоже прайват? не все так однозначно- например паблик метод который дергает пару десятков мапперов и тд,которые приватны. А если все это еще и в асинхрощине . понятно что если отдать на вход а и получить то что ты хотел- оно хорошо и правильно ,значит все внутри работает,но бывает так что какой то хороший человек меняет что то в коде,сборщик падает с красным тестом- а там метод,который я описал выше и сразу не очень понятно что поломал этот человек- что по сути не есть хорошо - вот поэтому лучше сделать желаемые для тестов методы пекейдж приватными и тестировать сколько душе угодно. Разраб же он какой- хочет на каждый баг по 4 часа из спринта- вникнуть в контекст,подебажить и тд- а тут куча мелких тестиков и сразу видно - ну вот же тут не тот тип данных или что то еще) а если включиться в вашу философию то можно написать один тест на весь сервис ага работает ну и хрен с ним тогда) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 19:03 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
da17 Если что, то я уже все уяснил. А вот мне еще хотелось бы уточнить у более опытных коллег, теперь для тестирования часто приходится переделывать интерфейсы классов. Например был класс B который использовался в классе A и нигде более. Что бы протестировать поведение класса А пришлось B выносить наружу и передавать в конструктор, иначе не сделаешь его мок-объектом. Как-то вот странно все это. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 20:14 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
da17 Если что, то я уже все уяснил. А вот мне еще хотелось бы уточнить у более опытных коллег, теперь для тестирования часто приходится переделывать интерфейсы классов. Например был класс B который использовался в классе A и нигде более. Что бы протестировать поведение класса А пришлось B выносить наружу и передавать в конструктор, иначе не сделаешь его мок-объектом. Как-то вот странно все это. Дык понятно странно. Т.к. "по правильному" нужно в начале писать unit-test, а потом делать реализацию. Наоборот получается дико не удобно. В таком случае, лучше "забить" на unit-test. А написать интеграционный тест, который тестирует часть бизнес-логики. И мокать в лучшем случае работу с БД (ну или другим хранилищем данных). Тестировать всю цепочку объектов. При этом не надо стремиться к 100% покрытию тестами. Только success-варианты. Остальное валить в Exception. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 08:04 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul , эм.. вообще результат не должен зависеть от того как ты к нему пришел. Кто-то использует TDD, кто-то нет, но количество и качество тестов не должно зависеть от этого. TDD в некоторых случаях ускоряет написание prod кода. Кто-то им не пользуется и возможно в некоторых ситуациях пишет prod код медленней, соответственно это минус один бонус. Но остальные бонусы тестов (как модульных, так и других) остаются актуальными. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 10:53 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev mad_nazgul , эм.. вообще результат не должен зависеть от того как ты к нему пришел. Кто-то использует TDD, кто-то нет, но количество и качество тестов не должно зависеть от этого. TDD в некоторых случаях ускоряет написание prod кода. Кто-то им не пользуется и возможно в некоторых ситуациях пишет prod код медленней, соответственно это минус один бонус. Но остальные бонусы тестов (как модульных, так и других) остаются актуальными. Так он и не зависит. Просто unit-tests без TDD - это одна сплошная головная боль. Как бы только от этого не много. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 15:42 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav BashkyrtsevЯ ждал когда будет предложен этот вариант. Ведь именно он якобы решает все проблемы: и тестировать проще, и инкапсуляцию можем соблюдать. Но: 1. Если этот доп класс будет public, то тут два варианта: 1.а Мы его предаем в конструктор тому кто создает CSV. В таком случае мы усложнили клиентский код. Т.е. ради тестов мы усложнили прод код. 1.б Мы его создаем внутри класса который в итоге генерит CSV. И если мы их тестируем отдельно, то мы предполагаем что CSV класс использует класс вычислениями и тем самым опять же нарушаем инкапсуляцию. 2. Если этот доп класс будет package private, то: 2.а Мы все равно тестируем не Public API. Т.е. по сути это то же самое что тестировать не public метод. 2.б То же что и в 1.б я бы сделал примерно так: 1. новый публичный метод(e.g. getResults()), который возвращает результаты в виде какой-то удобной (и unmodifiable) структуры, (ничего плохого а таком методе нет: он не раскрывает никаких кишок класса; по сути, это те же данные, которые клиенты уже получают посредством toCsv(), просто в другом формате ) 2. новый класс (e.g. CSVWriter), для генерации CSV, который получает эту новую структуру, в конструктор (или параметр метода, не суть) 3. меняем метод toCsv(): он теперь использует новый класс (e.g. new CSVWriter(this.getResults()).write() ) что получилось: 1. новый метод дает нам данные в удобной для тестирования форме 2. новый класс (e.g. CSVWriter) даже не надо тестировать: он будет протестирован уже существующими тестами для toCsv() 3. никакого изменения сложности для клиентов не произошло; для них вообще ничего не поменялось 4. все гораздо лучше с точки зрения single-responsibility principle 5. приоткрыта дверца в сторону поддержки других форматов вывода это конечно далеко от идеала, но даже так, сильно лучше чем было. IMHO Stanislav BashkyrtsevНе верь всему что пишут на заборах. вот зря вы так. Robert Martin написал несколько хороших книжек и ввел в обиход понятие Clean Code. да, не все что он пропагандирует бесспорно, но, в целом, он говорит правильные вещи ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2021, 14:43 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
gmugarновый публичный метод(e.g. getResults()), который возвращает результаты в виде какой-то удобной (и unmodifiable) структуры,Ну вот ты открыл метод который до этого был private или package private (если мы его таки открывали для тестирования). Что здесь принципиально поменялось? Т.е. если этот метод лежал в старом классе, то тебе не нравилось его открывать только для тестирования. А если его перенести в другой класс и сделать public, то так открывать код чисто для тестирования - правильно. Почему? gmugarон не раскрывает никаких кишок класса; по сути, это те же данные, которые клиенты уже получают посредством toCsv(), просто в другом форматеПлохо тут то что у нас +1 публичная сущность. До этого я видел с какими классами в пакете мне нужно было взаимодействовать, а теперь оказывается есть public классы которые на самом деле мне не нужны. Но эта проблема решается - твой новый класс можно сам по себе сделать package private, т.е. он не будет виден из-вне пакета. Но опять же - в чем разница метод открывать или класс? gmugarRobert Martin написал несколько хороших книжек и ввел в обиход понятие Clean Code.Я не большой знаток Дяди Боба, все что я о нем знаю: 1. Он написал книгу на простую тему: Clean Code. Ее в общем-то много кто мог написать. Хотя это все равно полезная работа. Если бы он только по-аккуратней писал про комментирование кода.. а то многие ленивые жопы теперь не заставить документацию писать. 2. Он создал Fitnesse - самый ужасный из известных мне фреймворков для тестирования. Наверняка он еще что-то сделал, о чем я не знаю.. Но тем не менее, полагаться на авторитет неправильно - каждую идею нужно понимать и рассказывать от себя . А не просто ссылаться на великие умы. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2021, 15:24 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul Так он и не зависит. Просто unit-tests без TDD - это одна сплошная головная боль. Как бы только от этого не много. юнит тесты это хорошая и правильная штука,а TDD для тех ,кто какает в себя ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2021, 19:12 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 mad_nazgul Так он и не зависит. Просто unit-tests без TDD - это одна сплошная головная боль. Как бы только от этого не много. юнит тесты это хорошая и правильная штука,а TDD для тех ,кто какает в себя Автоматические тесты это хорошая и правильная штука. unit-test это инструмент для разработчика. Им можно пользоваться, можно не пользоваться. unit-test без TDD это головная боль, что показал ТС. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 06:38 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Техника TDD не везде подходит. Если у вас - прототип или какой-то быстро развивающийся стартап то TDD никто не пишет просто по причине отсуствия контрактов. Их - некому описать. Поэтому иногда лошадь бежит впереди телеги и иногда телега бежит впереди. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 10:55 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Техника TDD не везде подходит. Если у вас - прототип или какой-то быстро развивающийся стартап то TDD никто не пишет просто по причине отсуствия контрактов. Их - некому описать. Поэтому иногда лошадь бежит впереди телеги и иногда телега бежит впереди. Все равно когда пишешь код, какой-то контракт появляется, так что стартап это не помеха использованию TDD. TDD как раз позволят итеративно создавать и уточнять контракт. Просто техника TDD настолько не привычная, что для использования нужно ломать свои навыки разработки об колено. При этом преимуществ для того кто пишет не так уж и много. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 16:17 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul Просто unit-tests без TDD - это одна сплошная головная боль. если сходить в армию, то там довольно быстро объяснят кое-какие "постулаты": - нужно знать устав - соблюдать субординацию - все должно быть параллельно или перпендикулярно TTD - это из той же оперы: лысый черт собрал себе армию поклонников и эти поклонники носятся с TTD как дураки с писаной торбой, хотя на качество кода TTD вообще никак не влияет: - если задаться вопросом получился ли в итоге хороший дизайн или нет - это выясняется только после того как API начали пользоваться третьи лица, а то что тесты под него написаны - это не суть важно, вон все API связанное к криптографией выглядит откровенно так себе (я еще какой-нить ASN.1 не упоминаю), однако его кто-таки в жаву затащил (оно же тесты проходит, ага) - большинство проектов состоит из библиотечных вызовов чуть более чем полностью, на кой лад пытаться смотреть на метрики jacoco, если оно краевые эффекты в библиотеках не покрывает? нужно следить за тем, чтобы тесты были сами по себе разумные и затрагивали библиотеки ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 16:19 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul Все равно когда пишешь код, какой-то контракт появляется, так что стартап это не помеха использованию TDD. Сложно... сложно все это. Если говорить о контракте на "кончиках пальцев", то пишущий его не успеет описать даже словами. Стартап - это бешеный темп продуцирования кода, 90% из которого завтра уйдет в мусорное ведро. А пишуший - суть вольный художник который "так видит" или просто делает POC или демо возможностей. Он слишком увлечен идеей чтобы ее формализовывать. Попробуйте ввести в стартапы стандартные процессы - и стартап умрёт и кодеры разбегуся в разные стороны. IMHO. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 18:03 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton mad_nazgul Все равно когда пишешь код, какой-то контракт появляется, так что стартап это не помеха использованию TDD. Сложно... сложно все это. Если говорить о контракте на "кончиках пальцев", то пишущий его не успеет описать даже словами. Стартап - это бешеный темп продуцирования кода, 90% из которого завтра уйдет в мусорное ведро. А пишуший - суть вольный художник который "так видит" или просто делает POC или демо возможностей. Он слишком увлечен идеей чтобы ее формализовывать. Попробуйте ввести в стартапы стандартные процессы - и стартап умрёт и кодеры разбегуся в разные стороны. IMHO. я работаю в конторе,которая очень активно развивается и мы пишем очень много кода,зачастую я начинаю какой то модуль - и еще толком никто не знает как должно быть вообще,есть некая бизнес хотелка,по которой бегло пробежались аналитики и все -я просто не представляю ,как на такое накинуть TDD TDD наверно хорош там где у тебя все описано и задокументировано,на разраба присылают чотко описанные задачи,вплоть до типа и размера полей.Тут можно написать тест и потом к нему код,потому что изменений не будет- все описано и согласовано - а коддер тут по сути как обычный наборщик текста,поэтому без разницы что сначала писать код или тест ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 19:38 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Андрей Панфилов на качество кода TTD вообще никак не влияет: - если задаться вопросом получился ли в итоге хороший дизайн или нет - это выясняется только после того как API начали пользоваться третьи лица, а то что тесты под него написаны - это не суть важно, вон все API связанное к криптографией выглядит откровенно так себе (я еще какой-нить ASN.1 не упоминаю), однако его кто-таки в жаву затащил (оно же тесты проходит, ага) - большинство проектов состоит из библиотечных вызовов чуть более чем полностью, на кой лад пытаться смотреть на метрики jacoco, если оно краевые эффекты в библиотеках не покрывает? нужно следить за тем, чтобы тесты были сами по себе разумные и затрагивали библиотеки а) потому что требуется хорошая производительность б) потому что пишут security эксперты, а не программисты которые умеют писать И уж тем более не понимаю причем тут ASN.1.. Это просто формат, это как говорить что XSD/XML некрасивые, к TDD - никакого отношения. maytonСтартап - это бешеный темп продуцирования кода, 90% из которого завтра уйдет в мусорное ведро.Ну во-первых, здесь описан как раз очень медленный темп (потому как 90% в мусор), а во-вторых.. Тут многие пишут про мифические стартапы, но такое ощущение что не совсем понимают что это. Стартап - это просто проект, который получил огромное финансирование еще на этапе идеи/прототипа/ранней версии (поэтому он start up). Это не гарантирует что там какой-то страшно быстрый темп и что все пишут говнокод на коленке. Наверно большинство стартапов правда разрабатываются в быстром темпе, как собственно и обычные проекты . Часто слышу что больше 90% стартапов проваливаются - возможно от части это из-за быстрого темпа.. Может даже из-за отсутствия TDD (шучу). asv79я работаю в конторе,которая очень активно развивается и мы пишем очень много кода,зачастую я начинаю какой то модуль - и еще толком никто не знает как должно быть вообще,есть некая бизнес хотелка,по которой бегло пробежались аналитики и все -я просто не представляю ,как на такое накинуть TDDНу это лишь значит что у вас слабые аналитика, разработка и, видимо, в целом процессы. У вас в принципе мало шансов на эффективную разработку. Это не значит что у вас ничего не получится, это лишь значит что вы медленно продвигаетесь вперед. Основная задача TDD лишь в том, чтоб разбивать сложные задачи/алгоритмы на мелкие шаги. Сложные штуки бывают во всех отраслях и во всех типах организаций. И в "активно развивающихся", и в стабильных. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 21:21 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton стартап умрёт и кодеры разбегуся в разные стороны. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 06:24 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Может быть и к лучшему. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 10:00 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Часто слышу что больше 90% стартапов проваливаются - возможно от части это из-за быстрого темпа.. Может даже из-за отсутствия TDD (шучу). Разумеется TDD здесь не причем. Правильнее сказать что TDD не влияет на принятие решения о качестве стартапа. Ведь стартап демонстрирует идею или концепт. И временные затраты на TDD не дают того ощутимого результата в данном случае. А оттачиванеи качества кода - это уже 2 фаза стартапа. Когда уже бизнес заинтересован в продолжении эксплуатации этого изделия. Здесь уже можно и баги закрыть или качество покрытия поднять. Поэтому лошадь и телега поменялись местами. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 11:05 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Отстал я от жизни. Мои познания в методологиях наверное начала не то, что 2000, а 1990-х годов. Тогда модно было не TDD, а extrime programming. Вроде как ориентировалось как раз на скорость написание кода. Но одновременное написание теста - одна из основ и в XP. Т.ч. тесты тестам рознь и со скоростью набивания текста связаны слабо. AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 11:16 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Отстал я от жизни. Мои познания в методологиях наверное начала не то, что 2000, а 1990-х годов. Тогда модно было не TDD, а extrime programming. Вроде как ориентировалось как раз на скорость написание кода. Но одновременное написание теста - одна из основ и в XP. Т.ч. тесты тестам рознь и со скоростью набивания текста связаны слабо. AFAIK Ну главное в XP это писать вдвоем, желательно за одним компьютером. <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 17:02 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Jetbrains там разрабатывал какие-то новые плагины для коллективной разработки. Кто-то пробовал? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 17:30 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Ну это лишь значит что у вас слабые аналитика, разработка и, видимо, в целом процессы. У вас в принципе мало шансов на эффективную разработку. Это не значит что у вас ничего не получится, это лишь значит что вы медленно продвигаетесь вперед. Основная задача TDD лишь в том, чтоб разбивать сложные задачи/алгоритмы на мелкие шаги. Сложные штуки бывают во всех отраслях и во всех типах организаций. И в "активно развивающихся", и в стабильных. Какой то спонтанный выброс эмоций) зачем мне тдд ,чтобы декомозировать задачи на более маленькие? у вас все настолько плохо с тех.лидом ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 17:48 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Я вот когда свои структуры данных разрабатывал. Графы там. и прочее. В первую очередь писал тесты. Это скажем так... сам бох велел. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 19:21 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Я вот когда свои структуры данных разрабатывал. Графы там. и прочее. В первую очередь писал тесты. Это скажем так... сам бох велел. Звучит так ,Как если бы ты пришел в ресторан и прежде чем выбрать что- то из меню сходил в туалет и покакал в себя) поняв что TASTE NOT SO GOOD ты выбрал что то иное,из того что ел вчера) Ну по факту комичная ситуация с TDD - видимо либо аналитики слабые,либо очено мало работы у разрабов- по другому сложно понять - зачем это ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 22:00 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 mayton Я вот когда свои структуры данных разрабатывал. Графы там. и прочее. В первую очередь писал тесты. Это скажем так... сам бох велел. Звучит так ,Как если бы ты пришел в ресторан и прежде чем выбрать что- то из меню сходил в туалет и покакал в себя) поняв что TASTE NOT SO GOOD ты выбрал что то иное,из того что ел вчера) Ну по факту комичная ситуация с TDD - видимо либо аналитики слабые,либо очено мало работы у разрабов- по другому сложно понять - зачем это Если вспомнить что тесты - суть документация (или спека) переписанная кодом - то все становится на места. Кодишь по спеке - кодишь по TDD. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 22:09 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79 пропущено... Звучит так ,Как если бы ты пришел в ресторан и прежде чем выбрать что- то из меню сходил в туалет и покакал в себя) поняв что TASTE NOT SO GOOD ты выбрал что то иное,из того что ел вчера) Ну по факту комичная ситуация с TDD - видимо либо аналитики слабые,либо очено мало работы у разрабов- по другому сложно понять - зачем это Если вспомнить что тесты - суть документация (или спека) переписанная кодом - то все становится на места. Кодишь по спеке - кодишь по TDD. возникает один вопрос где взять спеку)тебе такое задатут миллионы разрабов по всему миру и твое ТДД не вытерпит ни какой критики нет никаких спек в реальном программировании- тока у мастадонотов,да и то не всегда и не везде да даже у мастадонтов такая там печаль что забей ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 22:14 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 mayton пропущено... Если вспомнить что тесты - суть документация (или спека) переписанная кодом - то все становится на места. Кодишь по спеке - кодишь по TDD. возникает один вопрос где взять спеку)тебе такое задатут миллионы разрабов по всему миру и твое ТДД не вытерпит ни какой критики нет никаких спек в реальном программировании- тока у мастадонотов,да и то не всегда и не везде да даже у мастадонтов такая там печаль что забей Тест - это набор утверждений. Обычно простых. Если на вход бизнес-объекта пришло ... тра-ляля то на выходе .. труляля. Обычно это хотя-бы 1 раз проговаривают. Хотя-бы сам для себя ты это проговариваешь. Можно говорить - функция. И мне даже Ф. больше нравится но уж коли мы тут варимся в мире ООП то пускай будет бизнес-объект. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 22:28 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79 пропущено... возникает один вопрос где взять спеку)тебе такое задатут миллионы разрабов по всему миру и твое ТДД не вытерпит ни какой критики нет никаких спек в реальном программировании- тока у мастадонотов,да и то не всегда и не везде да даже у мастадонтов такая там печаль что забей Тест - это набор утверждений. Обычно простых. Если на вход бизнес-объекта пришло ... тра-ляля то на выходе .. труляля. Обычно это хотя-бы 1 раз проговаривают. Хотя-бы сам для себя ты это проговариваешь. Можно говорить - функция. И мне даже Ф. больше нравится но уж коли мы тут варимся в мире ООП то пускай будет бизнес-объект. смотри если есть некая вменяемая спека -зачем тебе тест? вот у меня две задачи одна подходит под TDD - по кафке нам летят месаджи из них я должен собрать два объекта и связать их 1 к многим тут да можно написать тест - но накой хер он мне?я буду тратить пару дней на это и потом еще 1 на код?) а тесты юнит я нагенерю за пару часов ну и вторая задача это прикрутить АБАК - никто не знает ничего что надо и что должно быть - нука прикрути сюда свой ТДД) шляпа это все ,как правильно сказал выше памфилов- просто какой то дурак сказал и все начали повторять ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 22:38 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79зачем мне тдд ,чтобы декомозировать задачи на более маленькие?Кто-то что-то говорил про декомпозицию задач? Книгу по TDD ты видимо не читал. Когда тут тебе рассказывают что такое TDD ты тоже не особо вчитываешься. Т.е. ты влезаешь в дискуссию в которой заведомо не разбираешься и учиться не отказываешься. Осталось только понять зачем :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 22:42 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 смотри если есть некая вменяемая спека -зачем тебе тест? вот у меня две задачи одна подходит под TDD - по кафке нам летят месаджи из них я должен собрать два объекта и связать их 1 к многим тут да можно написать тест - но накой хер он мне?я буду тратить пару дней на это и потом еще 1 на код?) а тесты юнит я нагенерю за пару часов ну и вторая задача это прикрутить АБАК - никто не знает ничего что надо и что должно быть - нука прикрути сюда свой ТДД) шляпа это все ,как правильно сказал выше памфилов- просто какой то дурак сказал и все начали повторять Панфилов сказал что не нужно бездумно повторять. Вот ты поменяешь проект (кто знает) и придешь вникать в новые процессы. А там окажется и команда и весь облуживающий персонал сидят на TDD просто потому что предметная область такова. И условия подходящие. Что возмутишся? Или скажешь - я не буду делать? Хер там. Сядешь, утрёшь слёзы и погнал кодить по TDD. Так што от тюрмы и от сумы.... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2021, 22:47 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev asv79зачем мне тдд ,чтобы декомозировать задачи на более маленькие? Книгу по TDD ты видимо не читал. Когда тут тебе рассказывают что такое TDD ты тоже не особо вчитываешься. Т.е. ты влезаешь в дискуссию в которой заведомо не разбираешься и учиться не отказываешься. Осталось только понять зачем :) я прекрасно знаю что такое ваше печальное ТДД и имел опыт работы с таким подходом) вот ты стасят вроде и норм местами,но вешаешь ярлыки не разобравшись в проблеме) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 00:37 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79 смотри если есть некая вменяемая спека -зачем тебе тест? вот у меня две задачи одна подходит под TDD - по кафке нам летят месаджи из них я должен собрать два объекта и связать их 1 к многим тут да можно написать тест - но накой хер он мне?я буду тратить пару дней на это и потом еще 1 на код?) а тесты юнит я нагенерю за пару часов ну и вторая задача это прикрутить АБАК - никто не знает ничего что надо и что должно быть - нука прикрути сюда свой ТДД) шляпа это все ,как правильно сказал выше памфилов- просто какой то дурак сказал и все начали повторять Панфилов сказал что не нужно бездумно повторять. Вот ты поменяешь проект (кто знает) и придешь вникать в новые процессы. А там окажется и команда и весь облуживающий персонал сидят на TDD просто потому что предметная область такова. И условия подходящие. Что возмутишся? Или скажешь - я не буду делать? Хер там. Сядешь, утрёшь слёзы и погнал кодить по TDD. Так што от тюрмы и от сумы.... Никода я не буду кодить по ТДД,ибо это уже не кодинг,а какая то ферма по выращиваниванию овощей Мне нужен полет фантазии и прочие ништяки,а свое ТДД засуньте себе ЖПО и будьте здоровы) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 00:40 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Панфилов сказал что не нужно бездумно повторять. панфилов сказал то что сказал и там явно не то что ты сейчас написал По факту ТДД нужно для просто каких то конченых даунов ,которые не способны реализовать задачу иначе,чем через уже готовый тест ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 00:53 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79, мне нравится твой неприкрытый максимализм. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 10:14 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsevgmugarновый публичный метод(e.g. getResults()), который возвращает результаты в виде какой-то удобной (и unmodifiable) структуры, Ну вот ты открыл метод который до этого был private или package private (если мы его таки открывали для тестирования). Что здесь принципиально поменялось? Т.е. если этот метод лежал в старом классе, то тебе не нравилось его открывать только для тестирования. А если его перенести в другой класс и сделать public, то так открывать код чисто для тестирования - правильно. Почему? gmugarон не раскрывает никаких кишок класса; по сути, это те же данные, которые клиенты уже получают посредством toCsv(), просто в другом формате Плохо тут то что у нас +1 публичная сущность. До этого я видел с какими классами в пакете мне нужно было взаимодействовать, а теперь оказывается есть public классы которые на самом деле мне не нужны. Но эта проблема решается - твой новый класс можно сам по себе сделать package private, т.е. он не будет виден из-вне пакета. Но опять же - в чем разница метод открывать или класс? мы с вами по кругу ходим. напомню, что изначально вопрос был в том нужно ли тестировать private методы. речь шла о private, а не о package-private, что не одно и то же. моя мысль в том, что если, вдруг, без тестирования через private не получается (с соблюдением концепции хорошего unit-теста, одна из важных особенностей которого - простота написание этого самого unit-теста), то надо что-то менять, а не лезть в private. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 11:52 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
gmugar Stanislav Bashkyrtsevпропущено... Ну вот ты открыл метод который до этого был private или package private (если мы его таки открывали для тестирования). Что здесь принципиально поменялось? Т.е. если этот метод лежал в старом классе, то тебе не нравилось его открывать только для тестирования. А если его перенести в другой класс и сделать public, то так открывать код чисто для тестирования - правильно. Почему? пропущено... мы с вами по кругу ходим. напомню, что изначально вопрос был в том нужно ли тестировать private методы. речь шла о private, а не о package-private, что не одно и то же. моя мысль в том, что если, вдруг, без тестирования через private не получается (с соблюдением концепции хорошего unit-теста, одна из важных особенностей которого - простота написание этого самого unit-теста), то надо что-то менять, а не лезть в private.Ну дак то что ты предлагаешь сделать - это и есть лезть в private. Твое предложение заключается в том чтоб просто открыть приватный код, выделив его в отдельный класс. Я лишь хочу заметить что это ничем по своей сути не отличается от того чтоб сделать приватный метод package private оставив его в изначальном классе. В обоих случаях мы открываем private код. А правильный "не лезть в private" заключается в том чтоб оставить prod код в покое и тестировать все через настоящий public API (а не сконструированный только потому что тестам надо было). Со всеми вытекающими плюсами и минусами. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 11:58 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Мы скоро дойдем до Java9 модулей. Мне кажется спор - схоластика вокруг ООП. Что считать приватным и полу-приватным. Ведь это же не важно. А важно чтобы бизнес-кейс прошел на 100% в зеленый сегмент тестирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 12:23 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav BashkyrtsevА правильный "не лезть в private" заключается в том чтоб оставить prod код в покое и тестировать все через настоящий public API (а не сконструированный только потому что тестам надо было). Со всеми вытекающими плюсами и минусами. с этим, собственно, никто и не спорит. вообще тестировать нужно только, этот самый, "настоящий public API". но вот c "логику очень часть неудобно покрывать через public интерфейс."(это ваши слова), я не согласен в корне. мой опыт, однозначно, не совпадает с этой точкой зрения. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 12:26 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Народ (прогеры) уверяет в веб, что при тестах скорость снижается только первые два года их написания. Зато потоооооом)) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 12:36 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Ну дак то что ты предлагаешь сделать - это и есть лезть в private. Твое предложение заключается в том чтоб просто открыть приватный код, выделив его в отдельный класс. Я лишь хочу заметить что это ничем по своей сути не отличается от того чтоб сделать приватный метод package private оставив его в изначальном классе. В обоих случаях мы открываем private код. А правильный "не лезть в private" заключается в том чтоб оставить prod код в покое и тестировать все через настоящий public API (а не сконструированный только потому что тестам надо было). Со всеми вытекающими плюсами и минусами. Не совсем. Если нужно протестировать private метод, это значит, что этот метод не может быть private. И скорее всего там где-то нарушен принцип "single responsibility principle". Так что вынести логику в отдельный класс это скорее всего правильное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 13:24 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul Stanislav Bashkyrtsev Ну дак то что ты предлагаешь сделать - это и есть лезть в private. Твое предложение заключается в том чтоб просто открыть приватный код, выделив его в отдельный класс. Я лишь хочу заметить что это ничем по своей сути не отличается от того чтоб сделать приватный метод package private оставив его в изначальном классе. В обоих случаях мы открываем private код. А правильный "не лезть в private" заключается в том чтоб оставить prod код в покое и тестировать все через настоящий public API (а не сконструированный только потому что тестам надо было). Со всеми вытекающими плюсами и минусами. Не совсем. Если нужно протестировать private метод, это значит, что этот метод не может быть private. И скорее всего там где-то нарушен принцип "single responsibility principle". Так что вынести логику в отдельный класс это скорее всего правильное решение. Stanislav BashkyrtsevРеальный пример: есть робот который умеет переливать жидкость из пробирок в другие пробирки. Одна из команд представленна в виде: ВсосатьЖидкость(сколько, откуда, еще доп параметры). Робот принимает на вход CSV, соответственно классу нужен только один публичный метод: toCsv(). Но в тестах парсить CSV для проверки расчетов очень не удобно из-за чего приходится открывать кой-какие внутренности.В этом примере SRP не поможет. Просто мы будем тестировать либо CSV, либо прийдется открывать поля класса через те же package private или public getter'ы. Здесь явно нарушается инкапсуляция только ради тестов. И это частая проблема. Просто люди так много слышат что тесты якобы улучшают дизайн, что пытаются отгонять от себя эти темные мысли :D gmugarвообще тестировать нужно только, этот самый, "настоящий public API".Наша песня хороша - начинай сначала :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 14:15 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Просто люди так много слышат что тесты якобы улучшают дизайн Вообще практическая польза тестов стремится к нулю по факту они ипользуются лишь при сборке и потом приложение попадает на тестовые стенды ,где даже если бы тестов не было - все это вылезет 100500 тысяч миллионов раз и без всяких юнит тестов Тоесть просто выкидываем деньги на ветер- тратя время разрабов на создание и что не мало важно поддержку этой юзлесс истории Стандартная ситуация - написаны тесты,поступила задача поменять какой то класс ,который учавствовал в тесте- фигах тесты падают- хотя фактически все норм,просто тест уже неактуален и вот ты идешь ее актуализировать Получается порочный круг ,вместо какой то видимой помощи,тесты наоборот замедляют работу разработчиков Вот что по сути нужно,это коменнты на коде - ты тут нагадил - а потом после тебя люди приходят и гадают ,а что это такое и что он хотел- доходит до такого ,что никто не в состоянии понять для чего вот это поле в классе и какой в нем смысл) Я не против тестов ,как таковых - но какой то продуктивной пользы в них не вижу от слова совсем и есть конторы где с тестами носятся как с писаной торбой,а есть где этих тестов нет и все прекрасно работает и развивается в своем ключе без них ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 14:53 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79, тыж в банке верно? Значит в разработке есть своя цена ошибки. Это как страховка. Ты платишь по чуть-чуть чтобы для прод-релиза иметь больше гарантий что ты ничего не сломал внося изменения. То что ты говоришь про тестовые стенды - это другая часть работы. Это наверное отвественность QA. Но QA не тестирует нефункциональное минорное и техническое. Всякие там NPE и прочее. Они конешно могут это найти случайно. Но репутация сектора разработки тоже страдает. Выж не должны выкатывать забагованный по самую крышу рализ-кандидат. Надо как-то проявить аккуратность. Репутационный вопрос вобщемто. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 15:02 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 Вот что по сути нужно,это коменнты на коде - ты тут нагадил - а потом после тебя люди приходят и гадают ,а что это такое и что он хотел- доходит до такого ,что никто не в состоянии понять для чего вот это поле в классе и какой в нем смысл) По поводу каментов в коде. Мой опыт показывает что их не актуализируют. Тоесть грубо говоря ты написал тонну текста. Потом зашел другой разраб. Код поменял а камент проигнорил. Далее - ситуация усугубляется. Есть код и есть текст которые друг другу противоречат. И если контроль над кодом идет через тестирование то контроля над каментами нет вообще никакого. Дай бох его прочитают во время код-ревью и дадут по шапке. Но я готов спорить на виски (и выигрывать) что нечитают и не актуализируют. Или нужно иметь на проекте отдельного человека (теч-райтера) который будет буквально отвечать за документацию в Doxia, JavaDoc, Confluence e.t.c. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 15:12 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79, тыж в банке верно? Значит в разработке есть своя цена ошибки. Это как страховка. Ты платишь по чуть-чуть чтобы для прод-релиза иметь больше гарантий что ты ничего не сломал внося изменения. То что ты говоришь про тестовые стенды - это другая часть работы. Это наверное отвественность QA. Но QA не тестирует нефункциональное минорное и техническое. Всякие там NPE и прочее. Они конешно могут это найти случайно. Но репутация сектора разработки тоже страдает. Выж не должны выкатывать забагованный по самую крышу рализ-кандидат. Надо как-то проявить аккуратность. Репутационный вопрос вобщемто. в банке - и вот честно скажу за 2 года работы я ни разу не видел такого момента,чтобы эти тесты что то там отловили,кроме того,что при любых изменениях приходится еще и тесты актуализировать - по факту двойная работа. Я могу тебе сказать как произсходит приемка релиза,сначала все это тестируют QА,потом это выкатывается все на препрод ,где уже проходит ПСИ ,далее прод с двух недельным гарантийным обязательством- далее этот релиз уходит из нашей зоны ответственности тоесть понятно что баги могут вылезти и они вылазят вне зависимости от тестов по факту при сборке в ста случаях из ста за мою практику когда падает тест- ты идешь и правишь тест)вот и вся цена этим тестам ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 17:13 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Странная практика, странная статистика Юнит тесты они еще и как регрессивные тесты работают. Если при серьезном модификации кода, тесты ни разу ни одной ошибки не нашли то: 1. или программисты святые и ошибок не допускают 2. или серьезной модификации кода не делали 3. или тесты - ..... IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 17:24 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79 Вот что по сути нужно,это коменнты на коде - ты тут нагадил - а потом после тебя люди приходят и гадают ,а что это такое и что он хотел- доходит до такого ,что никто не в состоянии понять для чего вот это поле в классе и какой в нем смысл) По поводу каментов в коде. Мой опыт показывает что их не актуализируют. Тоесть грубо говоря ты написал тонну текста. Потом зашел другой разраб. Код поменял а камент проигнорил. Далее - ситуация усугубляется. Есть код и есть текст которые друг другу противоречат. И если контроль над кодом идет через тестирование то контроля над каментами нет вообще никакого. Дай бох его прочитают во время код-ревью и дадут по шапке. Но я готов спорить на виски (и выигрывать) что нечитают и не актуализируют. Или нужно иметь на проекте отдельного человека (теч-райтера) который будет буквально отвечать за документацию в Doxia, JavaDoc, Confluence e.t.c. да к сожалению это так и есть. Не тесты конечно есть и полезные- например те,которые чекают время запроса,выполенния метода,записи там в бд и тд где по SLA мы видим вкатываемся мы в нормы ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 17:26 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 в банке - и вот честно скажу за 2 года работы я ни разу не видел такого момента,чтобы эти тесты что то там отловили,кроме того,что при любых изменениях приходится еще и тесты актуализировать - по факту двойная работа. Я могу тебе сказать как произсходит приемка релиза,сначала все это тестируют QА,потом это выкатывается все на препрод ,где уже проходит ПСИ ,далее прод с двух недельным гарантийным обязательством- далее этот релиз уходит из нашей зоны ответственности тоесть понятно что баги могут вылезти и они вылазят вне зависимости от тестов по факту при сборке в ста случаях из ста за мою практику когда падает тест- ты идешь и правишь тест)вот и вся цена этим тестам Посмотри Code-coverage. Sonar показывает или Jacoco плагин. Возможно у тебя нужный и полезный код просто не покрыт. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 17:34 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 Не тесты конечно есть и полезные- например те,которые чекают время запроса,выполенния метода,записи там в бд и тд где по SLA мы видим вкатываемся мы в нормы SLA/Performance - это немножко другое. Это не про correctness а это фактически проверка того что изменения не просадили перформанс. И эти тесты не закрепляют бизнес-логику. Обычно такая задача перед ними не стоит. Они утверждают например что скорость канала месседжей например не меньше чем 100 штук в секунду. Понятное дело что такие тесты не будут ловить логические баги. А они скорее закрепляют собой инфра-структурные метрики. Сеть там... сервисы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 17:47 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79 в банке - и вот честно скажу за 2 года работы я ни разу не видел такого момента,чтобы эти тесты что то там отловили,кроме того,что при любых изменениях приходится еще и тесты актуализировать - по факту двойная работа. Я могу тебе сказать как произсходит приемка релиза,сначала все это тестируют QА,потом это выкатывается все на препрод ,где уже проходит ПСИ ,далее прод с двух недельным гарантийным обязательством- далее этот релиз уходит из нашей зоны ответственности тоесть понятно что баги могут вылезти и они вылазят вне зависимости от тестов по факту при сборке в ста случаях из ста за мою практику когда падает тест- ты идешь и правишь тест)вот и вся цена этим тестам Посмотри Code-coverage. Sonar показывает или Jacoco плагин. Возможно у тебя нужный и полезный код просто не покрыт. у нас покрыто все - сам понимаешь зона отвественности- хотя как я уже говорил - толку просто ноль а вот slшки - как раз очень часто помогают,так как сам понимаешь на хайлоад системах очень важны такие моменты ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 18:53 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 mayton пропущено... Посмотри Code-coverage. Sonar показывает или Jacoco плагин. Возможно у тебя нужный и полезный код просто не покрыт. у нас покрыто все - сам понимаешь зона отвественности- хотя как я уже говорил - толку просто ноль а вот slшки - как раз очень часто помогают,так как сам понимаешь на хайлоад системах очень важны такие моменты Ты выше пишешь про "двойную работу". Тесты должны писаться так чтобы их поддержка не занимала столько-же времени сколько и написание основного кода. Если у вас тесты настолько сложны и трудозатратны - то проанализируйте ГДЕ сложно и просто выкиньте это из покрытия. Перепишите проще. Выкиньте @SpringBoorTest. Напишите обычные без фреймворка. Если бизнес функция не позволяет - выделите функцию в чистый (pure) java class. Обычно мне это всегда удавалось. И жить будет проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 19:00 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Ты выше пишешь про "двойную работу". Тесты должны писаться так чтобы их поддержка не занимала столько-же времени сколько и написание основного кода. Если у вас тесты настолько сложны и трудозатратны - то проанализируйте ГДЕ сложно и просто выкиньте это из покрытия. Перепишите проще. Выкиньте @SpringBoorTest. Напишите обычные без фреймворка. Если бизнес функция не позволяет - выделите функцию в чистый (pure) java class. Обычно мне это всегда удавалось. И жить будет проще.[/quot] любая поддержка это уже поддержка,будь то самые простые юнит тесты или интеграционные - их нужно постоянно актуализировать когда много кода,тестов тоже много,зачастую при даже не самом большом рефакторинге приходится делать сопоставимый объем работы и в тестах-это супер накладно ,нулевое бизнес велью ,около нулевое девелопер велью ну может ток тестировшики тебе спасибо скажут ,что один раз в тысячу лет ты что то там тестами этими не пропустил) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 23:50 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Странная практика, странная статистика Юнит тесты они еще и как регрессивные тесты работают. Если при серьезном модификации кода, тесты ни разу ни одной ошибки не нашли то: 1. или программисты святые и ошибок не допускают 2. или серьезной модификации кода не делали 3. или тесты - ..... IMHO при серьезной модификации кода тесты ломаются и это очевидно что их приходится актуализировать- что может там поймать поломанный тест? программисты не святые,но есть жеское код ревью - я знаю ,что во многих конторах на эту часть разработки почему то кладут болт,а потом у них тесты краснеют - что не удивительно) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2021, 23:52 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79, слышал про PBT? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2021, 12:03 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Ты выше пишешь про "двойную работу". Тесты должны писаться так чтобы их поддержка не занимала столько-же времени сколько и написание основного кода. Если у вас тесты настолько сложны и трудозатратны - то проанализируйте ГДЕ сложно и просто выкиньте это из покрытия. Перепишите проще. Выкиньте @SpringBoorTest. Напишите обычные без фреймворка. Если бизнес функция не позволяет - выделите функцию в чистый (pure) java class. Обычно мне это всегда удавалось. И жить будет проще. Ну ты сказал! Может ещё "Чистый код" посоветуешь почитать?! Какое еще single responsibility! Тут таску надо закрывать, а не тесты писать! <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 09:12 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
При чем тут чистый код? Чувак неделю пишет user story. Потом еще неделю - тесты по ней. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 11:01 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton При чем тут чистый код? Чувак неделю пишет user story. Потом еще неделю - тесты по ней. При том, что тестируемость, ходит где-то рядом с чистым кодом и принципом single responsibility :-) Когда принцип single responsibility нарушается, то сразу возникает вопрос как тестировать private-методы :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 12:07 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul Когда принцип single responsibility нарушается, то сразу возникает вопрос как тестировать private-методы :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 13:18 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul mayton При чем тут чистый код? Чувак неделю пишет user story. Потом еще неделю - тесты по ней. При том, что тестируемость, ходит где-то рядом с чистым кодом и принципом single responsibility :-) Когда принцип single responsibility нарушается, то сразу возникает вопрос как тестировать private-методы :-) Я к похожему умозаключению пришел, один из заказчиков потребовал 100 процентное покрытие. Если закрыть тяжело все кейсы приватного метода закрыть через публичный то значит скорее всего приватный метод не должен быть приватным, и нужно выносить в отдельный класс ибо слишком много он делает. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 15:11 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 ... при серьезной модификации кода тесты ломаются и это очевидно что их приходится актуализировать- что может там поймать поломанный тест? 1. модификация бывает не только с изменением функциональности. Например: 1.1. перформанс 1.2. рефакторинг 1.3. переход на новые библиотеки/принципы взаимодействия (например я мигрировал большой проект с tcp/ip socket на nio) и так далее и так далее 2. даже если и новые добавочные требования к функциональности, то обычно они НЕполностью заменяют старые, а лишь в какой-то части. И самое сложное, убедится, что "мелкое" исправление не поломало старый функционал и так далее и так далее И так вроде очевидно, для чего нужно regression test'ы. Нормые unit test'ы, обычно regression вполне заменяют и проблемы реально находят и помогают их решать. AFAIK. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 16:30 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Некоторые - вкладываются в страховку. Некоторые - нет. Скорее от проекта зависит. Я видел некоторые UI проекты в которых вообще ни одного авто-теста нет. Там - полностью полагаются на мануальное тестирование. Поэтому тестировать или нет - это договорённость в команде. Самому продакт-овнеру вобщем-то все равно пишем мы тесты или нет. А так - по топику вообще-то ответ всем очевиден. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 18:21 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton некоторые UI проекты в которых вообще ни одного авто-теста нет. Там - полностью полагаются на мануальное тестирование ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 13:19 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
am_sasa mayton некоторые UI проекты в которых вообще ни одного авто-теста нет. Там - полностью полагаются на мануальное тестирование Вот js - нужно постоянно тестировать. :-) А SQL просто сложно тестировать, т.к. инструменты для тестирования около нуля. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 15:56 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Поскольку SQL является декларативным языком то он изначально декларирует свой результат. Хотя я согласен что текст SQL может быть длинными и содержащим вложенные SQL и функции. Но есть качественная разница между SQL и императивным языком. Это примерно как разница между maven и gradle. Кроме того инструмент тестирования должен быть проще объекта тестирования. Иначе возникает другой парадокс о правильности самого инструмента и его statement. Или надо писать тест на тест. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 16:17 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Поскольку SQL является декларативным языком то он изначально декларирует свой результат. Хотя я согласен что текст SQL может быть длинными и содержащим вложенные SQL и функции. Но есть качественная разница между SQL и императивным языком. Это примерно как разница между maven и gradle. maytonКроме того инструмент тестирования должен быть проще объекта тестирования. Иначе возникает другой парадокс о правильности самого инструмента и его statement. Или надо писать тест на тест.Не знаю откуда такие требования взялись. Как инструмент для тестирования, так и сами тесты могут быть значительно сложней основного кода. И сил нужно будет потратить на тестирование намного больше чем на написание прод кода. Все зависит от того сколько гарантий мы хотим получить, насколько важно чтоб код работал верно. Если мы пишем какое-то второстепенное ПО для банка - народ переживет даже если оно совсем работать не будет. А если это софт для управления самолетами, ракетами, АЭС - то тут же совсем другой разговор. Тут и PBT, и MBT, и чего только не прийдется использовать. И конечно же сами инструменты для тестирования должны быть протестированы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 16:31 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Какая разница декларативен он или нет? Я в SQL много багов встречаю как минимум потому что мы не все про данные знаем/помним, какие-то моменты забываются и опа - миграция свалилась. Или того хуже - прошла, но неверно. Плюс бывает не по той ветке join'ов пошли и собрали не те данные. А можно пример такого бага? И мне также интересно как вы подготавливаете данные для подобного тестирования? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 16:37 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Не знаю откуда такие требования взялись. Как инструмент для тестирования, так и сами тесты могут быть значительно сложней основного кода. И сил нужно будет потратить на тестирование намного больше чем на написание прод кода. Хотел бы я на это посмотреть. Если вы доказываете теорему Пифагора - вы можете привлекать рассуждения более простого порядка чем сама теорема. Можете брать аксиомы. Но вы не можете доказать теорему Пифагора через Теорему Косинусов. Это абсурд. Никто не примет такое доказательство. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 16:39 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Stanislav Bashkyrtsev Какая разница декларативен он или нет? Я в SQL много багов встречаю как минимум потому что мы не все про данные знаем/помним, какие-то моменты забываются и опа - миграция свалилась. Или того хуже - прошла, но неверно. Плюс бывает не по той ветке join'ов пошли и собрали не те данные. А можно пример такого бага? 1. Решили для упрощения бизнес логики явно писать в БД имеет ли пользователь доступ к объекту или нет (вместо того чтоб вычислять на лету). Написали миграцию, которая проставляет флаг=true если пользователю >18. Но оказалось, что есть исключение - страна, в которой доступ можно разрешать только с 16. И админам (у которых возраст может быть не указан) тоже разрешать. 2. Добавляем новую колонку, знаем что она not null. Сразу же проставили constraint (а след строкой заполняем данными), хотя в таблице есть строки. 3. ... и т.д. maytonИ мне также интересно как вы подготавливаете данные для подобного тестирования?Мы редко пишем на это тесты. Но если пишем - ну заполняем данными, затем запускаем миграцию, затем проверяем результат. Это больше для background миграций, которые идут длительное время. Для таких приложение должно поддерживать и старые, и новые данные. А так.. как правило у нас есть дамп с прода - на нем куа тестируют вручную. Проходятся по своей тестовой документации, вспоминают что могли упустить, анализируют результат. maytonНо вы не можете доказать теорему Пифагора через Теорему Косинусов. Это абсурд. Никто не примет такое доказательство.Во-первых, в математике бывает что доказывают/высчитывают что-то более простое какими-то более сложными (я счас не говорю про цикличность) абстракциями. Типа посчитать площадь четырехугольника с помощью cross product'a двух векторов. А во-вторых, мы про доказательства (где цикличность нежелательна) ничего не говорили - мы говорим про протестировать . А тут уж крути-верти как хочешь, твоя задача просто написать два куска кода результат которых будет совпадать. Ну и возьмем что-то наглядное.. Вот к примеру вынесли зачем-то операцию умножения в функцию и хотим протестировать. Реализовать такое легко, а написать PBT тесты, да еще и не заглядывая в википедию - эт уже не каждый сможет. Другой пример (более реалистичный) - test oracle. Хотим какую-то структуру данных реализовать. Более простую чем что-то существующее в Java SDK, с меньшим функционалом, но быстрей. Как мы ее будем тестировать? Можем написать MBT с использованием стандартной реализации в качестве модели. И получается тестируем более простой код более сложным. Третий пример (еще реалистичней) - написали какую-то concurrent структуру данных. И вот тут попробуй еще написать тесты которые бы выявили многопоточные проблемы.. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 17:12 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev mayton пропущено... А можно пример такого бага? 1. Решили для упрощения бизнес логики явно писать в БД имеет ли пользователь доступ к объекту или нет (вместо того чтоб вычислять на лету). Написали миграцию, которая проставляет флаг=true если пользователю >18. Но оказалось, что есть исключение - страна, в которой доступ можно разрешать только с 16. И админам (у которых возраст может быть не указан) тоже разрешать. 2. Добавляем новую колонку, знаем что она not null. Сразу же проставили constraint (а след строкой заполняем данными), хотя в таблице есть строки. 3. ... и т.д. Задачи миграции. Апгрейда версий. Или просто одноразовые скрипты - это штучный товар. Они делаются 1 раз в жизни и исполняются один раз. И тестирование для них нужно особое. Я-б даже сказал это не периодическое тестирование а эксклюзивное. Можно договариваться заранее с админами БД Oracle например о подготовке flashback сразу после неудачной миграции. Вобщем все это напоминает полёт на луну. Неформализовываемое. И бесконечно сложное по комплексности. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 18:09 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Мы редко пишем на это тесты. Но если пишем - ну заполняем данными, затем запускаем миграцию, затем проверяем результат. Это больше для background миграций, которые идут длительное время. Для таких приложение должно поддерживать и старые, и новые данные. А так.. как правило у нас есть дамп с прода - на нем куа тестируют вручную. Проходятся по своей тестовой документации, вспоминают что могли упустить, анализируют результат. Вот это самое интересное. Обычный разработчик софта оперирует кодом. Данные для него либо - синтетические. Которые он создает сам. В этом случае он должен фактически выполнить работу по наполнению БД насколько чтобы покрыть максимум краевых кейсов своего запроса. Насколько сложна эта работа? Я думаю - соизмерима с разработкой основной user-story. Либо данные - продуктовые. Дамп с прода - тоже интересная задача. Во многих организациях ИБ его просто не позволит сделать. Прод - слишком ценен. Для этого придумывают невообразимые трансформации данных (отбеливание) с целью убить любую sensitive инфу и обезличить данные кастомера. Это эпика. Мдя. Тут можно отдельный программный продукт создавать. Отбеливатель. Со своими настройками. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 18:16 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Поскольку SQL является декларативным языком то он изначально декларирует свой результат. Хотя я согласен что текст SQL может быть длинными и содержащим вложенные SQL и функции. Но есть качественная разница между SQL и императивным языком. Это примерно как разница между maven и gradle. "Бойся своих желаний они могут исполнится" :-) Так же и с SQL. Ты получаешь то что запрашиваешь. Но может оказаться, что запрос не правильный. И возвращает не то что нужно. Хотя страшнее когда он возвращает не только то что нужно и/или не всё что только нужно. :-) mayton Кроме того инструмент тестирования должен быть проще объекта тестирования. Иначе возникает другой парадокс о правильности самого инструмента и его statement. Или надо писать тест на тест. Вот поэтому и "двигают в народ" unit-test. Т.к. проще написать такой тест, проще протестировать. Да и инструментарий очень простой. Другое дело интеграционные тесты. Там как раз вылазит NP-полная задача (с комбинаторным взрывом) тестирования всех веток БЛ. Поэтому интеграционные тесты не могут быть простыми. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2021, 09:30 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Третий пример (еще реалистичней) - написали какую-то concurrent структуру данных. И вот тут попробуй еще написать тесты которые бы выявили многопоточные проблемы.. Это - еще сложнее. Я не знаю тестов которые доказывают что мультипоточный код не содержит к примеру дедлоков. Была теория (кажется на базе сетей Петри) что подобные вещи доказывают делая преобразования матриц переходов (transition matrix) для сети которая моделирует проблему. Но эта теория осталась в универах и я никогда не видел чтобы хоть один разработчик ею пользовался. Зачастую только PROD-эксплуатация показывает что в мультипоточном коде есть проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2021, 11:17 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Stanislav Bashkyrtsev Третий пример (еще реалистичней) - написали какую-то concurrent структуру данных. И вот тут попробуй еще написать тесты которые бы выявили многопоточные проблемы.. Это - еще сложнее. Я не знаю тестов которые доказывают что мультипоточный код не содержит к примеру дедлоков. Была теория (кажется на базе сетей Петри) что подобные вещи доказывают делая преобразования матриц переходов (transition matrix) для сети которая моделирует проблему. Но эта теория осталась в универах и я никогда не видел чтобы хоть один разработчик ею пользовался. Зачастую только PROD-эксплуатация показывает что в мультипоточном коде есть проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2021, 11:44 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
а знаете ли вы, что концепции unit-test более чем 40 лет? (первые публикации по теме были в конце 70-ых прошлого века) и как-то никто особо и не пользовался... а почему так? IMHO, потому что @asv79 во многом прав: unit-test - не серебряная пуля. 1. это очень дорого: хорошие unit-test-ы и хорошее покрытие = +50% к бюджету проекта как минимум 2. и даже покрытие в 100% не избавляет совершенно от других видов тестирования; не говоря о том, что есть целые классы задач для которых unit-test-ы бесполезны или очень слабо полезны (как и обсуждалось выше) далёкий от IT бизнес, по сей день, не понимает зачем это надо (сталкиваюсь постоянно) я подозреваю, что первый реальный пропагандист: Kent Beck. он написал о них в своей мега популярной книге( и он же, к слову, создатель JUnit) оно и понятно: в контексте Agile unit-test-ы гораздо более ценны, потому что предполагается постоянный рефакторинг, а рефакторинг это как раз тот случай где unit-test-ы реально полезны. но что прикольно: даже среди Agile евангелистов не все разделяют восторженное отношение к unit-test-ам (Dave Thomas : ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2021, 16:24 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
gmugar1. это очень дорого: хорошие unit-test-ы и хорошее покрытие = +50% к бюджету проекта как минимумЯ пока не встречал проектов в которых модульные тесты замедляли их.. Они оттягивают перевод конкретной задачи в тестирование, но не сроки сдачи самого проекта. Я правда возможно по-другому пониманию "хорошим покрытием". gmugarдалёкий от IT бизнес, по сей день, не понимает зачем это надо (сталкиваюсь постоянно)Никогда этого не понимал.. Откуда бизнес вообще узнает про тесты. Это подноготная программиста, о них никому говорить явно не надо. gmugarоно и понятно: в контексте Agile unit-test-ы гораздо более ценны, потому что предполагается постоянный рефакторинг, а рефакторинг это как раз тот случай где unit-test-ы реально полезны.Рефакторинг есть везде, не только в Agile. И сломать только что работающий функционал тоже можно везде. Не знаю почему бы модульные тесты были как-то связаны с Agile.. gmugarнесмотря на то, что лично я большой поклонник unit-test-ов, я признаю, что они нужны и оправданы очень не всегда(в особенности с 100% coverage) Про 100% покрытие не спорю (речь же про line/branch coverage?). Но интересно когда модульные тесты будут не оправданы? Ну, кроме каких-то прототипов. Я на своей памяти не могу припомнить такой ситуации.. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2021, 18:00 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
gmugar 1. это очень дорого: хорошие unit-test-ы и хорошее покрытие = +50% к бюджету проекта как минимум Никто не ставит таких задач. Ни на одном проекте нам (к примеру) не заказывали процентовку покрытия. Это глупо. Код - не одинаковый. Есть 20% особо важного кода, который представляет собой костяк логики. Его и надо покрыть обязательно. Можное не 20. Можно 15 или 25 не суть важно. Главное что меньшая часть кода обладает большим влиянием на качество продукта. Как по Паретто. А оставшиеся 80% это различного рода интеграции, конфигурации, DSL языки и формальные процедуры оставшиеся от фреймворков. Их покрывать не нужно. Покрытие особо ничего не даст а лишь усложнит поддержку тестов при эволюции. Еще к пользе тестов я-бы добавил что они являют самую актуальную (!) документацию по использованию. Реально! Актуальнее некуда. Никакой JavaDoc и Confluence не сравнится в точности. Читаем как книгу тесты (сверху вниз) и озвучиваем что на наших глазах происходит. Если применять Scala или JBehave(Java) или Spock(Groovy) то некоторые стейтменты можно писать на таком DSL что будет выглядеть как английски текст. Бизнес-аналитики такое любят. Наглядно. И реально работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2021, 19:56 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul mayton Поскольку SQL является декларативным языком то он изначально декларирует свой результат. Хотя я согласен что текст SQL может быть длинными и содержащим вложенные SQL и функции. Но есть качественная разница между SQL и императивным языком. Это примерно как разница между maven и gradle. "Бойся своих желаний они могут исполнится" :-) Так же и с SQL. Ты получаешь то что запрашиваешь. Но может оказаться, что запрос не правильный. И возвращает не то что нужно. Хотя страшнее когда он возвращает не только то что нужно и/или не всё что только нужно. :-) mayton Кроме того инструмент тестирования должен быть проще объекта тестирования. Иначе возникает другой парадокс о правильности самого инструмента и его statement. Или надо писать тест на тест. Вот поэтому и "двигают в народ" unit-test. Т.к. проще написать такой тест, проще протестировать. Да и инструментарий очень простой. Другое дело интеграционные тесты. Там как раз вылазит NP-полная задача (с комбинаторным взрывом) тестирования всех веток БЛ. Поэтому интеграционные тесты не могут быть простыми. интеграционные тесты как по мне полная куйня- какая та ситнтетика ,обвешаная моками лучшие тесты как я уже выяснил это адекватно настроеный пайплайн ,наличие тест стенда и пары хороших макак на должности QA ,умеющих тыкать в постман а все вот это джава тестирование ну оно вроде бы кто то сказал что нужно - а зачем уже давно забыли,как по мне просто юзлес хрень- у нас весь код в тестах ,coverage 90% и в реальности - разрабы только тратят время на актуализацию,а тестировщики потом находят все баги поэтому как только я где то стану лидом) я тут же выпилю все тесты ,разгружу разрабов от поддержки и написания этой куйни ,а на высвободившиеся деньги найму пару QA макак их пту) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2021, 20:20 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Еще к пользе тестов я-бы добавил что они являют самую актуальную (!) документацию по использованию. Реально! Актуальнее некуда. Никакой JavaDoc и Confluence не сравнится в точности. Читаем как книгу тесты (сверху вниз) и озвучиваем что на наших глазах происходит.. Полнейшая хрень- никогда по тестам ты реально не поймешь что в коде происходит,ибо как ты выше заметил тесты обычно покрывают 20-30% Давно уже надо признать ,что тесты это ярмо- которое тянет на себе разраб,а вот зачем - большой вопрос Мой ответ - ну типо так принято,мы так привыкли,а вдруг на проде что то вылезет))ну какие то вообще не состоятельные пруфы,а бизнес за это платит Ни какие тесты никогда не исключат багов в вашем апе,по большому счету поддержка и написание этих тестов выливается в очень большие суммы с нулевым бизнес велью к сожалению ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2021, 20:25 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79, вот с 2 последними постами- на 100500% согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2021, 20:29 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79поэтому как только я где то стану лидом)Я надеюсь что это случится не раньше чем лет через 10 (хотя в наше время в общем-то и младших разработчиков назначают от безысходности). А к тому времени, если повезет, еще многое в голове поменяется. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2021, 20:34 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, сам автор кода и не подозревает, сколько может быть вариантов не учтённых им комбинаций, которые может ввести хороший юзер.... да и тестирование какого-то куска кода не гарантирует, что прошедший тесты код, в системе будет работать нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2021, 20:40 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
вадя asv79, вот с 2 последними постами- на 100500% согласен. это моя боль и борьба с лидом - который упорно не понимает,что тратит ресурсы разрабов вникуда требуя покрытия и актуализации по факту что сейчас мы имеем - какой то распухший пак с тестами,в который никто никогда не ходит,но при любом изменении там что то краснеет и ты идешь туда и начинаешь под свой код подкручивать эти тесты - вопрос ну и нах они нужны? Я как выше говорил воспринимаю нормально только SLA тесты,где видна хоть какая то польза - типо да не проходим по откклику и тд а когда я на входе подал 3+3 и ожидаю 6 ,причем эта 6ка где то замокана в мок репе ну и нахой оно?какой то непонятный секс в извращенной форме ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2021, 20:41 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev asv79поэтому как только я где то стану лидом) Я не хотел говорить,но это уже случилось) Вся тест помойка скоро будет выпелена,так как я вижу что 20% уходит на актуализацию,при нулевом бизнес велью) Чего и вам советую- включайте голову и задавайте сами себе вопросы - когда в последний раз тесты принесли вам не актуализацию очередную в виде выделенного на целый спринт разраба/20% времени команды ,а какую то реальную - ощутимую пользу если чо я не бизнес) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2021, 21:33 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79а когда я на входе подал 3+3 и ожидаю 6 ,причем эта 6ка где то замокана в мок репеЕсли у вас в тестировании активно используются моки, то да, это проблема. Но не проблема тестирования, а именно того как вы пишете тесты (и скорей всего - прод код тоже). В том виде как описано выше тестирование и правда большого смысла не имеет. asv79Я не хотел говорить,но это уже случилось)Соболезную.. Но в целом на сегодняшний день это частая проблема.asv79когда в последний раз тесты принесли вам не актуализацию очередную в виде выделенного на целый спринт разраба/20% времени команды ,а какую то реальную - ощутимую пользуНу в моем проекте это каждый день, но у меня очень уж сложная бизнес логика. На проектах по-проще это происходит реже, но все равно достаточно часто. Опять же - сильно зависит от их качества. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2021, 23:22 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev asv79а когда я на входе подал 3+3 и ожидаю 6 ,причем эта 6ка где то замокана в мок репе asv79Я не хотел говорить,но это уже случилось)Соболезную.. Но в целом на сегодняшний день это частая проблема.asv79когда в последний раз тесты принесли вам не актуализацию очередную в виде выделенного на целый спринт разраба/20% времени команды ,а какую то реальную - ощутимую пользуНу в моем проекте это каждый день, но у меня очень уж сложная бизнес логика. На проектах по-проще это происходит реже, но все равно достаточно часто. Опять же - сильно зависит от их качества. сложная бизнес логика это несколько маперов после кафка листенера?) братишь у нас гораздо серьезней логика - просто поверь мне на слово- и все эти тесты себя не оправдывают- так как их поддержка стоит существенных денег- не знаю про ваш вариант,может у вас бесплатно люди работают или просто нихуа не делают ,а судя по тому,что ты на форуме 24/7 то так и есть ) то тогда да,но в любой серьезной конторе так не получится к сожалению и твои доводы становятся несущественными.Хотя я оговорюсь тесты у нас есть - но их бизнес велью стремится к абсолютному нулю,и дело тут не в написании тестов и не в логике ,а в самой системе тестов- ибо тесты тестируют уже написанное - а что новое - оно сразу ломается отсюда простой вывод нах.. они?если сами тесты тупо подгоняются под код ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2021, 23:35 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79братишь у нас гораздо серьезней логика - просто поверь мне на словоЕсли бы я не видел твоих вопросов на этом форуме, может ты бы смог обмануть, ну или хотя бы заставить усомниться.. Но нет :) Излишняя самоуверенность будет сильно замедлять тебя в развитии (речь про годы ).. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2021, 23:52 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev asv79братишь у нас гораздо серьезней логика - просто поверь мне на слово опять же ты кидаешь камень сам в себя,так как не способен к анализу- ведь вполне возможно,что я могу пилить свой собственный проект,который не имеет к моей текущей работе никакого отношения- тоесть твои утверждения заведомо ложны ибо ты должен их проверить,но так как ты плохой программист ,а судя по темам где ты учавствуешь- это так и есть,то тебе простительно. Но между нами есть одно большое НО - я в теме два года и уже лид,а ты скорей всего кратно больше и до сих пор жуешь тут сопли) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2021, 00:13 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79ведь вполне возможно,что я могу пилить свой собственный проект,который не имеет к моей текущей работе никакого отношенияКакая разница, я ж не про тематику вопросов, а про уровень их сложности. asv79я в теме два годаЭто очень заметно, я как раз про два года и думал, хех.. Именно к двум годам чаще всего появляется гонор (у тех у кого он появляется). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2021, 01:08 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, Это как в статистике автоводителей. В первые пол года вождения учащаются аварии. Чайники начинают думать что они профи))) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2021, 08:12 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, Без обид,вчера я немного пошутил,так что не воспримай всерьез.До лида мне еще далеко. Ну по тестам- на данном этапе и из своего кругозора я вижу ,что они замедляют ,а толку от них нет. Типичный тест- из кафки получаем сообщение и преобразуем его в нужные нам представления,другими словами маппер И вот есть тест,который этот мапер покрывает.Ну вот и для чего он?Если из кафки придет не валидный меседж он не сможет дересеризоваться в объект того класса,который ты ожидаешь в листенере,если на твоей стороне поменялись представления,то у тебя падает тест и ты что идешь делать? правильно править тест,который подгоняется под новые свойства представления и все. Тоесть ситуация когда этот тест реально покраснеет и нужно будет править не сам тест,а код- ну я таких ситуаций вообще не помню,зато на каждом дейли - ой ребята там тесты упали- актуализируйте) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2021, 09:55 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79, если интересно - заведи отдельную тему на это. Только распиши чуть подробней. А то я не понял кто генерирует сообщение и почему тест падает: 1. Если это внешняя система, то это круто что тест падает - он показывает что формат двух систем разошелся 2. Если это наши же тесты генерят, то не понятно почему они могут сгенерировать невалидное сообщение.. Или сообщение где-то захардкожено, и его забывают обновлять когда обновляется формат? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2021, 12:35 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 Тоесть ситуация когда этот тест реально покраснеет и нужно будет править не сам тест,а код- ну я таких ситуаций вообще не помню,зато на каждом дейли - ой ребята там тесты упали- актуализируйте) Во-о-от для этого тесты и пишут! Человек не может помнить всё. И лучше пусть упадут тесты, чем упадет прод. При актуализации тестов, может оказаться, что нужно будет поменять не только тесты. Кроме того тесты это ещё один источник правды, после самого кода. Ещё раз. unit-test это инструменты разработчика для разработки. Никому кроме разработчика они особо не нужны. Пользу для бизнеса они приносят только в том смысле, что на дальней дистанции, разработчику легче работать с кодом. На короткой дистанции это не так. Нужно время для написания кода тестов. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2021, 07:33 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 mayton Еще к пользе тестов я-бы добавил что они являют самую актуальную (!) документацию по использованию. Реально! Актуальнее некуда. Никакой JavaDoc и Confluence не сравнится в точности. Читаем как книгу тесты (сверху вниз) и озвучиваем что на наших глазах происходит.. Полнейшая хрень- никогда по тестам ты реально не поймешь что в коде происходит,ибо как ты выше заметил тесты обычно покрывают 20-30% Давно уже надо признать ,что тесты это ярмо- которое тянет на себе разраб,а вот зачем - большой вопрос Мой ответ - ну типо так принято,мы так привыкли,а вдруг на проде что то вылезет))ну какие то вообще не состоятельные пруфы,а бизнес за это платит Я не знаю как построена система взаимоотноешний у вас на проекте. Но у вас должно быть пристальное и внимательное отношение к ошибкам на проде. Возможно ты - на зарплате и тебе безразлично, терпит убытки владелец ПО или нет. Но очень хорошим карьерным трамплином будет - приближение тебя самого к задачам и проблемам бизнеса. Если ты - чутко реагируешь на эти проблемы - то значит достоин повышения. Если тебе - безразлично то твоё повышение может быть по возрасту лет или там по внутренней аттестации я не знаю. В любом случае понимание рисков бизнеса и - страхование от них это признак seniority. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2021, 11:20 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton, авторВозможно ты - на зарплате и тебе безразлично, терпит убытки владелец ПО или нет. Но очень хорошим карьерным трамплином будет - приближение тебя самого к задачам и проблемам бизнеса. Если ты - чутко реагируешь на эти проблемы - то значит достоин повышения. Если тебе - безразлично то твоё повышение может быть по возрасту лет или там по внутренней аттестации я не знаю. В любом случае понимание рисков бизнеса и - страхование из сказанного следует один вывод - умеешь закрывать жопу - достоин повышения, и не важно во сколько это обходится бизнесу,.....тест прошел, значит жопа прикрыта и не важно сколько денег потрачено на составление, отладку, проверку теста. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2021, 11:41 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Пардон мы всё таки обсуждаем технические подходы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2021, 13:24 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul Во-о-от для этого тесты и пишут! Человек не может помнить всё. И лучше пусть упадут тесты, чем упадет прод. как прод то упадет)- падает тест ,его актуализируют и все,другой код не подвергается изменению в 99.9 % случаев тоесть если бы не было теста,то вообще ничего не упало бы и прекрасно работало. Опять же все эти тесты тупая ,голимая синтетика ,ты хоть обложись этими тестами с ног до головы- реальные баги как были ,так и будут и скорей всего в конторе,где разрабов шпуняют на эти тесты - багов будет в разы больше,так как времени на разработку остается меньше. И вообще не понятно как у вас сразу после пуша на прод чтоли идет поставка? обычно это некий релиз- перед которым идет несколько процессов- разработка- тестирование- пси и только потом прод тоесть после пуша и поставкой около 1.5 месяца всевозможных тестирований,смок ,регрес,нагрузочное итд и вот там как раз и отлавливается багулечка - процентов 70% ,остальное уже на реал юзерах в первые пару недель) и никакие тесты неспособны на это - тесты на данный момент в проектах,где есть QA отдел=ну такое себе ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2021, 17:26 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79 пропущено... Полнейшая хрень- никогда по тестам ты реально не поймешь что в коде происходит,ибо как ты выше заметил тесты обычно покрывают 20-30% Давно уже надо признать ,что тесты это ярмо- которое тянет на себе разраб,а вот зачем - большой вопрос Мой ответ - ну типо так принято,мы так привыкли,а вдруг на проде что то вылезет))ну какие то вообще не состоятельные пруфы,а бизнес за это платит Я не знаю как построена система взаимоотноешний у вас на проекте. Но у вас должно быть пристальное и внимательное отношение к ошибкам на проде. Возможно ты - на зарплате и тебе безразлично, терпит убытки владелец ПО или нет. Но очень хорошим карьерным трамплином будет - приближение тебя самого к задачам и проблемам бизнеса. Если ты - чутко реагируешь на эти проблемы - то значит достоин повышения. Если тебе - безразлично то твоё повышение может быть по возрасту лет или там по внутренней аттестации я не знаю. В любом случае понимание рисков бизнеса и - страхование от них это признак seniority. бизнес понимает как раз суть ,ибо сами прогеры- и поэтому у нас отличный QA отдел,а вот были места - где такого отдела по сути не было,зато заставляли писать тесты на каждый чих. Я не против тестов,пишу их ,но вижу их реальную бесполезность,особенно в рамках монолита,где я сейчас. Да на микросервисах тесты могли реально работать- ибо было много различных интеграций и как раз таки эти тесты и отлавливали все что поменяли в одном месте,но забыли поменять в другом) Но вот со стороны монолита это работает немного иначе - ну тоесть какой то помощи я почти за год от этих тестов не увидел,но зато ребята каждый день эти тесты правят хз зачем- я бы игнор навесил и забыл ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2021, 17:36 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 как прод то упадет)- падает тест ,его актуализируют и все,другой код не подвергается изменению в 99.9 % случаев тоесть если бы не было теста,то вообще ничего не упало бы и прекрасно работало. Да легко. При интеграции. Тест упал, значит изменился контракт. (Если это unit-test) И вместо, например, строки прилетело число. asv79 Опять же все эти тесты тупая ,голимая синтетика ,ты хоть обложись этими тестами с ног до головы- реальные баги как были ,так и будут и скорей всего в конторе,где разрабов шпуняют на эти тесты - багов будет в разы больше,так как времени на разработку остается меньше. unit-test это инструмент разработчика. Unit-test пишут разработчики сами для себя. Остальным они особо и не нужны. Зачем они нужны разработчикам? Чтобы не помнить всё. Своего рода документация, причем которая актуализаируется by default. asv79 И вообще не понятно как у вас сразу после пуша на прод чтоли идет поставка? обычно это некий релиз- перед которым идет несколько процессов- разработка- тестирование- пси и только потом прод тоесть после пуша и поставкой около 1.5 месяца всевозможных тестирований,смок ,регрес,нагрузочное итд и вот там как раз и отлавливается багулечка - процентов 70% ,остальное уже на реал юзерах в первые пару недель) и никакие тесты неспособны на это - тесты на данный момент в проектах,где есть QA отдел=ну такое себе В системе человек-машина слабое звено это человек. Человек не может, в отличии от машины, одинаково эффективно делать одну и ту же операцию много раз подряд. Поэтому чем выше автоматизация тестирования, тем меньше вероятность пропустить баг. Интеграционное тестирование не может протестировать всё приложение. По банальной причине - комбинаторный взрыв. Т.е. либо тест будет длиться годами (пока пройдет по всем веткам ветвления) Либо тестируем что нам кажется важным, при этом не факт что это является действительно важным. Если вам не нравятся unit-test, то не пишите. Этот инструмент, не для вас (ну или вы не умеете им пользоваться). Так не надо себя мучить. Пишите как вам удобно. Потом в 12ч ночи ждите звонка когда прод упадет. <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 07:19 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul asv79 как прод то упадет)- падает тест ,его актуализируют и все,другой код не подвергается изменению в 99.9 % случаев тоесть если бы не было теста,то вообще ничего не упало бы и прекрасно работало. Да легко. При интеграции. Тест упал, значит изменился контракт. (Если это unit-test) И вместо, например, строки прилетело число. Я конечно прошу прощения что вмешиваюсь, но что нужно сделать, чтобы "unit-test упал из-за изменения контракта" при одновременном соблюдении следующих условий: - мы тестируем вполне себе конкретный метод, со вполне себе конкретной сигнатурой - дизайн метода вполне себе "хороший", т.е. на вход он j.l.Object ни в каком виде не принимает, ровно как и не отдает ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 08:17 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev gmugar1. это очень дорого: хорошие unit-test-ы и хорошее покрытие = +50% к бюджету проекта как минимум gmugarдалёкий от IT бизнес, по сей день, не понимает зачем это надо (сталкиваюсь постоянно)Никогда этого не понимал.. Откуда бизнес вообще узнает про тесты. Это подноготная программиста, о них никому говорить явно не надо. это про одно и тоже - про деньги. у проектов, знаете-ли, бывает бюджет. и время разработчика стоит очень дорого. увеличение бюджета даже на 20% ради unit-test = космические суммы; попробуйте обосновать эти траты - поймут далеко не все Stanislav Bashkyrtsev gmugarоно и понятно: в контексте Agile unit-test-ы гораздо более ценны, потому что предполагается постоянный рефакторинг, а рефакторинг это как раз тот случай где unit-test-ы реально полезны. постоянный рефакторинг есть далеко не везде. Stanislav Bashkyrtsev gmugarнесмотря на то, что лично я большой поклонник unit-test-ов, я признаю, что они нужны и оправданы очень не всегда(в особенности с 100% coverage) не оправданно всегда, когда затраты на тесты и их поддержку не приносят хоть какой-то ощутимой пользы понять где эта граница полезности не всегда легко, да отсюда и проистекают рекомендации о том, что не надо покрывать unit-test-ами (ищите в интернетах, таких статей, больших и интересных, много "What should you not test") ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 09:11 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
gmugarэто про одно и тоже - про деньги. у проектов, знаете-ли, бывает бюджет. и время разработчика стоит очень дорого. увеличение бюджета даже на 20% ради unit-test = космические суммы; попробуйте обосновать эти траты - поймут далеко не всеДак откуда бизнес вообще узнает про это? Ни на одном проекте у меня бизнес сам не спрашивал "а сколько времени вы тратите на модульное тестирование". Они и знать-то не знают что такое существуют. Мы же об этом им не говорим, как не говорим и про рефакторинги и прочие технические детали. Им это не интересно. Они просто радуются результату. gmugar Stanislav Bashkyrtsev пропущено... Рефакторинг есть везде, не только в Agile. И сломать только что работающий функционал тоже можно везде. Не знаю почему бы модульные тесты были как-то связаны с Agile.. gmugar Stanislav Bashkyrtsev пропущено... Про 100% покрытие не спорю (речь же про line/branch coverage?). Но интересно когда модульные тесты будут не оправданы? Ну, кроме каких-то прототипов. Я на своей памяти не могу припомнить такой ситуации.. не оправданно всегда, когда затраты на тесты и их поддержку не приносят хоть какой-то ощутимой пользыЯ попросил конкретный пример.. Сам я таких таких ситуаций не помню. Есть вещи которые сложно тестировать (генерация PDF), на них часто забивают. Но чтоб вообще не писать тесты на проекте и это бы ускоряло разработку - такого не встречал. Андрей Панфилов mad_nazgul пропущено... Да легко. При интеграции. Тест упал, значит изменился контракт. (Если это unit-test) И вместо, например, строки прилетело число. Я конечно прошу прощения что вмешиваюсь, но что нужно сделать, чтобы "unit-test упал из-за изменения контракта" при одновременном соблюдении следующих условий: - мы тестируем вполне себе конкретный метод, со вполне себе конкретной сигнатурой - дизайн метода вполне себе "хороший", т.е. на вход он j.l.Object ни в каком виде не принимает, ровно как и не отдает ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 09:43 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 бизнес понимает как раз суть ,ибо сами прогеры- и поэтому у нас отличный QA отдел,а вот были места - где такого отдела по сути не было,зато заставляли писать тесты на каждый чих. Я не против тестов,пишу их ,но вижу их реальную бесполезность,особенно в рамках монолита,где я сейчас. Да на микросервисах тесты могли реально работать- ибо было много различных интеграций и как раз таки эти тесты и отлавливали все что поменяли в одном месте,но забыли поменять в другом) Но вот со стороны монолита это работает немного иначе - ну тоесть какой то помощи я почти за год от этих тестов не увидел,но зато ребята каждый день эти тесты правят хз зачем- я бы игнор навесил и забыл Стас дружище. Вот ты уже раз 10 повторил один и тот же стейтмент о том что видишь реальную бесполезность тестов. Ты говорил об этом со своим техническим лидом? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 12:07 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Ты говорил об этом со своим техническим лидом? ".. врач сказал: "в морг". значит в морг...." mayton Пардон мы всё таки обсуждаем технические подходы. тесты сделал, - "..К пуговицам претензии есть?..", и не важно как костюмчик сидит. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:03 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79 ... Но вот со стороны монолита это работает немного иначе - ну тоесть какой то помощи я почти за год от этих тестов не увидел,но зато ребята каждый день эти тесты правят хз зачем- я бы игнор навесил и забыл Стас дружище. Вот ты уже раз 10 повторил один и тот же стейтмент о том что видишь реальную бесполезность тестов. Во многих случаях (тестирование логики в БД, тестирование не модульно созданного монолита, тестирование при постоянной разработке и меняющихся требованиях и так далее) можно говорить, что тесты и их поддержание в актуальном состоянии очень дорого. Но говорить, что они бесполезны... Х.з.... видел многие проекты где необходимых тестов не было, именно из-за их дороговизны (или кривизны рук, не смогли малыми силами сделать тесты)... но говорить о бесполезности - пытались, полезность была всем понятна, но просто не смогли сделать ((( Ручное тестирование - не является альтернативой. Для нового функционала, да, конечно. Но с точки зрения регрессион тестов - ручное тестирование просто не реально. IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:43 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
вадя тесты сделал, - "..К пуговицам претензии есть?..", и не важно как костюмчик сидит. IMHO & AFAIK вообще-то тесты (план тестирования) должны делать не столько программисты, сколько аналитики/консультанты. Есть ТЗ, требования - вместе с ним должен быть базовый/начальный план тестирования. По крайне мере по Oracle AIM ровно так. Без относительно ручные/автоматические тесты. Unit Test'ы обычно пишут сами программисты. Но если мы хотим от тестов еще и ценности для бизнеса - то нужно ориентироваться все же на план тестирования, который должен возникать НЕ при программирование, а значительно раньше. Граница между Unit / интеграционные и так далее - IMHO для монолита не очень очевидна. Для многих типов монолитов вообще Unit тест не возможен (логика в бд, MS Acess, FoxPro и так далее) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:49 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
вадя mayton Ты говорил об этом со своим техническим лидом? ".. врач сказал: "в морг". значит в морг...." mayton Пардон мы всё таки обсуждаем технические подходы. тесты сделал, - "..К пуговицам претензии есть?..", и не важно как костюмчик сидит. Давай подойдем с другой стороны к вопросу. Не с про-активной а с реактивной. Вот допустим сделан релиз. И был зафиксирован к примеру 5 критических багов и 3 основных и 2 минорных. Надо проанализировать ситуацию. И понять как так случилось что 5 багов было пропущено? Если это были кейсы которые было принпиципльно НЕВОЗМОЖНО протестировать (баг на стороне БД) или вообще проблема сетевой инфраструктуры или кто-то завтыкал ключи и пароли обновить - то это просто будет зафиксировано как неизбежность. Но если был шанс поймать это тестированием чистой бизнес-функции - то после фиксации такие тесты надо написать. И обобщить этот approach на всё приложение. Посмотреть где в подобных местах может случится следующий баг. Придавить тестами. Вот как-то так. Итеративно. И это покрытие уже будет покрывать не инварианты где тестят что 1==1 и не пустышки про которые так ругается Стас а реально, боевой и значимый код. И вот этот боевой код должен быть компактным. Я ванговал 20% но я готов согласится и на меньшее. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 14:45 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Не специалист по ISO 9000 Но вроде ISO 9000 не требует, что бы ошибок не было. Но требует (!), что бы если ошибка/проблема была выявлена, то были приняты организационные меры, что бы такая ошибка/проблема (а лучше целый класс проблем такого рода) не могла повториться в дальнейшем Тесты и должны давать такую возможность. Если баг выявили, то должен быть тест, гарантирующий что такой баг не будет повторен. Но это в теории. А на практике, например в Oracle СУБД, дофига багов которые были устранены в 11.4, а в 11.5 уже обратно появились один в один ((( Как так? ((( И не сказать, что Oracle маленькая контора, и не сказать, что у них бюджен на разработку СУБД (основного продукта) маленький.... а те же самые баги по несколько раз всплывают ((( и где тесты ((( и где качество ((( AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 15:14 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Стас дружище. Вот ты уже раз 10 повторил один и тот же стейтмент о том что видишь реальную бесполезность тестов. Ты говорил об этом со своим техническим лидом? Конечно,он топил за TDD вообще,кое как удалось его убедить ,что в рамках растущего на как на дрожжах проекта - такая концепция просто непременима .Сошлись с ним на интерагционных и унит тестах и я наверно первый кто написал какое то огромное количество тестов тогда,потом его слава богу уволили и тема тестов благополучно сошла на нет.Но до сих пор я вижу ,как о те тесты постоянно спотыкаются разрабы при разработке и рефакторинге- тратится уйма времени на их актуализацию ,а это все деньги и достаточно ощутимые. Я не умаляю роли тестов,но как выше уже говорил на монолитах наверно они просто бессмыслены. На интеграциионных,когда вы разрабатываете несколькими командами что то микросервисное - там да они нужны с натяжкой вот ПРимер когда тесты нужны миросервисная архитектура брокер сообщений - например кафка есть некий микросервис выступающий источником правды для всех остальных сервисов- тоесть в нем лежат дтошки,которыми сервисы кидаются в друг друга и вот когда ты обновил свой сервис и сервис с дтохами - другой сервис об этом не знает ,но как только будут запушены интеграционные тесты - упадет- тем самым и достигается польза- разраб второго сервиса пойдет акутализировать свой код! именно код,а не тест- вот тут польза от тестов просто колосальная - так как если у вас достаточно большой зоопарк никаких тестировщиков не хватит все это потестить ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 18:32 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 и вот когда ты обновил свой сервис и сервис с дтохами - другой сервис об этом не знает ,но как только будут запушены интеграционные тесты - упадет- тем самым и достигается польза- разраб второго сервиса пойдет акутализировать свой код! именно код,а не тест- вот тут польза от тестов просто колосальная - так как если у вас достаточно большой зоопарк никаких тестировщиков не хватит все это потестить Ну это ближе к интеграционным. Ведь вам надо по сути проверить что контракт сошёлся. Дернули метод и он ответил - Http-200 OK! Кстати при зоопарке микросервисов - полезно создавать 1 общий репо куда складывать декларации сетевых протоколов в: - Swagger - GraphQl - SOAP - e.t.c. Как только кто-то обновился - все другие команды обязаны зайти и синхронизировать клиентов (или серверы кому как надо). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 20:56 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Вот допустим сделан релиз. И был зафиксирован к примеру 5 критических багов и 3 основных и 2 минорных. Надо проанализировать ситуацию. И понять как так случилось что 5 багов было пропущено? Если это были кейсы которые было принпиципльно НЕВОЗМОЖНО протестировать (баг на стороне БД) или вообще проблема сетевой инфраструктуры или кто-то завтыкал ключи и пароли обновить - то это просто будет зафиксировано как неизбежность. Но если был шанс поймать это тестированием чистой бизнес-функции - то после фиксации такие тесты надо написать. И обобщить этот approach на всё приложение. Посмотреть где в подобных местах может случится следующий баг. Придавить тестами. авторНо если был шанс пойматьа где вероятность , что затраты на это тестирование окупились? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 21:05 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Эту вероятность никто не посчитает. Сам оценишь. Если следующий релиз пройдет без багов - значит было успешно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 21:09 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Эту вероятность никто не посчитает. Сам оценишь. Если следующий релиз пройдет без багов - значит было успешно. и появятся новые.... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 21:10 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
вадя mayton Эту вероятность никто не посчитает. Сам оценишь. Если следующий релиз пройдет без багов - значит было успешно. и появятся новые.... А у тебя - серебрянная пуля есть? Или знаешь куда "соломки" подложить... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 21:16 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
НУ вот у меня сейчас есть план протестировать рест+ кафку+дб тоесть на вход я должен скормить джейсон -отправить его на наш рест - отуда послать в топик кафки - из топика достать ,записать в бд и проверить что я записал то,что я отправил в джейсон такого просто нет . везде будет одна синтетика- например кафку вообще никак не затестить - нужно юзать Embded а там уже не те настройки совершенно----------другие смысл тогда ее тестировать? если по факту будет тест не твоей кафки ,а какой то искуственной херни,которую ты ток что в тесте и создал и будешь ее же тестировать лол базу данных тестировать - нужно отельный класс рисовать - а если я хочу сразу на вход теста положить джейсон а на выходе достать запись из бд- такого нет нифига -есть воообщем и целом как я и говорил - проще руками проверить чем вот тратить время на эти велосипеды,так как внятного инструмента я не нашел чтобы такое осуществить ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 17:35 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 НУ вот у меня сейчас есть план протестировать рест+ кафку+дб Не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 19:19 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 НУ вот у меня сейчас есть план протестировать рест+ кафку+дб тоесть на вход я должен скормить джейсон -отправить его на наш рест - отуда послать в топик кафки - из топика достать ,записать в бд и проверить что я записал то,что я отправил в джейсон такого просто нет . везде будет одна синтетика- например кафку вообще никак не затестить - нужно юзать Embded а там уже не те настройки совершенно----------другие смысл тогда ее тестировать? если по факту будет тест не твоей кафки ,а какой то искуственной херни,которую ты ток что в тесте и создал и будешь ее же тестировать лол базу данных тестировать - нужно отельный класс рисовать - а если я хочу сразу на вход теста положить джейсон а на выходе достать запись из бд- такого нет нифига -есть воообщем и целом как я и говорил - проще руками проверить чем вот тратить время на эти велосипеды,так как внятного инструмента я не нашел чтобы такое осуществить То что вы описываете больше похоже на end2end тест. например кафку вообще никак не затестить - https://www.testcontainers.org/modules/kafka/ Там же можно и бд развернуть Но это в любом случае уже не unit-тест. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 19:22 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
нормальный тест был бы такой запускается локально инстанс приложения с докер контейнером зависимостей там инстанцируются БД,кафка и прочие нужности и далее тест шлет на локал хост /енд поинт некий джейсон ,этот джейсон собирается в объект и отсылается в кафка топик далее листенер видит саюж->пишщет его в базу и проверяет записалась ли такая запись в бд вот это был бы реально нормальный тест,а не вот эта вся резиновая мандула-> хочешь кафку тестить - ага -ну создай новую встроеную) а шо она тестирует - ну сама себя)) и вот с этими тестами по факту всегда так - тупо голимая синтетика для тестирования самой себя в моем кейсе нет вариков как все это протестировать- только тупо руками или создать еще одно приложение,котрое будет тестировать другое ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 19:26 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 нормальный тест был бы такой запускается локально инстанс приложения с докер контейнером зависимостей там инстанцируются БД,кафка и прочие нужности и далее тест шлет на локал хост /енд поинт некий джейсон ,этот джейсон собирается в объект и отсылается в кафка топик далее листенер видит саюж->пишщет его в базу Так а в чем проблема сделать такой тест? просто это не unit-тест, а что-то выше в пирамиде тестирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 19:27 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Lelouch asv79 НУ вот у меня сейчас есть план протестировать рест+ кафку+дб тоесть на вход я должен скормить джейсон -отправить его на наш рест - отуда послать в топик кафки - из топика достать ,записать в бд и проверить что я записал то,что я отправил в джейсон такого просто нет . везде будет одна синтетика- например кафку вообще никак не затестить - нужно юзать Embded а там уже не те настройки совершенно----------другие смысл тогда ее тестировать? если по факту будет тест не твоей кафки ,а какой то искуственной херни,которую ты ток что в тесте и создал и будешь ее же тестировать лол базу данных тестировать - нужно отельный класс рисовать - а если я хочу сразу на вход теста положить джейсон а на выходе достать запись из бд- такого нет нифига -есть воообщем и целом как я и говорил - проще руками проверить чем вот тратить время на эти велосипеды,так как внятного инструмента я не нашел чтобы такое осуществить То что вы описываете больше похоже на end2end тест. например кафку вообще никак не затестить - https://www.testcontainers.org/modules/kafka/ Там же можно и бд развернуть Но это в любом случае уже не unit-тест. контейенры та же синтетика я пробовал - но с реальными конфигами ничего не работает- чтобы с реального топика получить сабж и в бд его записать такого нет пока -нужно писать такую либу - ибо будет востребована ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 19:28 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 Lelouch пропущено... То что вы описываете больше похоже на end2end тест. например кафку вообще никак не затестить - https://www.testcontainers.org/modules/kafka/ Там же можно и бд развернуть Но это в любом случае уже не unit-тест. контейенры та же синтетика я пробовал - но с реальными конфигами ничего не работает- чтобы с реального топика получить сабж и в бд его записать такого нет пока -нужно писать такую либу - ибо будет востребована Без примера я могу в ответ написать только "пробовал, все работает, либа не нужна" ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 19:29 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79 НУ вот у меня сейчас есть план протестировать рест+ кафку+дб Не надо. да я тоже так думаю ,слишком много там подводных камней- например у нас все что нужно для работы приложения разворачивается в докер контейнере я тут попробовал туда же тест базу прописать чтобы при выполнении тестов использовалась тест база ,но не смог) я знаю что так можно- я так делал без докера - кстати удобная фича вместо эмбдед шляпы- которая может не поддерживать половину вашего функционала ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 19:31 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Lelouch asv79 нормальный тест был бы такой запускается локально инстанс приложения с докер контейнером зависимостей там инстанцируются БД,кафка и прочие нужности и далее тест шлет на локал хост /енд поинт некий джейсон ,этот джейсон собирается в объект и отсылается в кафка топик далее листенер видит саюж->пишщет его в базу Так а в чем проблема сделать такой тест? просто это не unit-тест, а что-то выше в пирамиде тестирования. я не представляю как написать такой тест и чтобы он не был синтетикой,там сразу кафка скажет вам привет вы будете не свой топик тетсить а синтетик шляпу на тест конфиге ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 19:32 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
и собственно к чему я это веду- разработка такого теста займет очень много времени и будет стоить достаточно много денег ,проверка птушником http реквест ->запрос в бд стремится к нулю по себестоимости ) вот вам и ценность ваших тестов а если что то не дай бог поменяется - вам придется этот ,я думаю очень сложный тест ,актуализировать -а это сможет далеко не каждый сотрудник ту лелоч- давай друг вместо балабольства реальный пример такого теста для вводных данных обычный рест апи- кафка- постргрес давай покажи нам класс - получи с реста объект ,прокинь его через кафку и положи в бд - и потом покажи тест как ты на вход отдаешь такой то джейсон и он ассертится с тем что ты в бд закинул- сможешь это = я тебе памятник поставлю) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 19:39 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Но я отвечу за тебя,чтоб ты не мучался - ты не сможешь этого сделать для начала тебе нужен рест темплейт- чтобы отостлать сабж своему приложению далее начинается проблема - чтобы твое приложение приняло запос - нужно использвать сприг бут тест ,который не совместим с тестом базы и скорей всего и кафкой ты начнешь клепать моки - и я скажу тебе давай до свиданья!) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 19:43 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Тестировать рест+ кафку+дб - это означает выполнять работу профильных админов и девопсов (в крупном предприятии). Можешь протестировать свою дев-конфигурацию. Отправь 1 месседж. И всё. Только сделать это 1 раз для самоконтроля и тест потом - отключить чтоб не мешал основному циклу тестирования бизнес-функций. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 19:48 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton, моя задумка была как авто тест- чтобы в проекте хранился образцец джейсон ,который мы нам должны прислать по кафке я хотел что сделать из джейсона сделать объект - послать его через продюсер в топик - далее в работу должно было включиться приложение- @KafkaListener увидев сообщение и положить его в бд и далее в тесте ассертнтуть ожидаемое с тем что в бд легло 1.пункт я сделал- из джейсона в файле я делаю объект и кидаю его в топик а далее тишина листенер приложения молчит - хотя в топике есть меседж- моя мысл была такова - записать то что пришло из кафки в бд - чекнуть на соотвествтие и удалить после теста- понятно что база была бы боевая собственно по сути все норм кроме того,что непонятно как послушать реальный топик в тесте,а не синтетичское дерьмо ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:11 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Тестировать рест+ кафку+дб - это означает выполнять работу профильных админов и девопсов (в крупном предприятии). Можешь протестировать свою дев-конфигурацию. Отправь 1 месседж. И всё. Только сделать это 1 раз для самоконтроля и тест потом - отключить чтоб не мешал основному циклу тестирования бизнес-функций. для ручного тестрования я запилил функционал - ну который типо с запроса берет джейсон кладет его в продюсер и отсылает в наш топики далее руками ты можешь посмотреть что объект лег корректно я так понимаю что в авто режиме такое будет очень дорого стоить ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:14 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 mayton Тестировать рест+ кафку+дб - это означает выполнять работу профильных админов и девопсов (в крупном предприятии). Можешь протестировать свою дев-конфигурацию. Отправь 1 месседж. И всё. Только сделать это 1 раз для самоконтроля и тест потом - отключить чтоб не мешал основному циклу тестирования бизнес-функций. для ручного тестрования я запилил функционал - ну который типо с запроса берет джейсон кладет его в продюсер и отсылает в наш топики далее руками ты можешь посмотреть что объект лег корректно я так понимаю что в авто режиме такое будет очень дорого стоить У тебя Junit-5 ? Заведи себе тег интеграции. Помаркируй этим тегом те тесты которые будут такими экзотическими. Код: java 1. 2. 3. 4.
И запускай их maven-ом отдельно. В доке по junit-5 есть описалово как это делать. Обычные тесты - без тегов. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:20 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79 пропущено... для ручного тестрования я запилил функционал - ну который типо с запроса берет джейсон кладет его в продюсер и отсылает в наш топики далее руками ты можешь посмотреть что объект лег корректно я так понимаю что в авто режиме такое будет очень дорого стоить У тебя Junit-5 ? Заведи себе тег интеграции. Помаркируй этим тегом те тесты которые будут такими экзотическими. Код: java 1. 2. 3. 4.
И запускай их maven-ом отдельно. В доке по junit-5 есть описалово как это делать. Обычные тесты - без тегов. у нас градл ,во вторых как я тебе выше писал все зависимостие подымаются в докер котнейнере тоесть чтобы что то добавить туда нужен будет хороший девопс у меня даже тест базу не получислось создать ,так какой то особый девопс секс если бы все лежало не в контейнере - я бы просто создал тест базу - в пакете теста создал конфиг для этой базы поднял бы контекст @SpringBootTest и скорей всего бы получил желаемое(не уверен на счет кафки) все таки ей нужен или полноценный инстанст приложения или я хз что ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:26 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Для gradle - тоже параметры передаются. Ну если все так сложно - то забей. Никто тебя не похвалит за поднятие докеров. Я так думаю. Особенно когда речь касается рабочих станций девелоперов. Забей короче. Не нужен тебе тест такой ценой. Пользы мало. А конфигурационных проблем масса. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:34 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 Но я отвечу за тебя,чтоб ты не мучался - ты не сможешь этого сделать для начала тебе нужен рест темплейт- чтобы отостлать сабж своему приложению далее начинается проблема - чтобы твое приложение приняло запос - нужно использвать сприг бут тест ,который не совместим с тестом базы и скорей всего и кафкой ты начнешь клепать моки - и я скажу тебе давай до свиданья!) 1) Собираешь контейнер со своим приложением 2) Через docker compose поднимаешь приложение и необходимое окружение 3) Выполняешь тесты Вот тут есть что-то похожее на пример для maven + testcontainers: https://bsideup.github.io/posts/spring_boot_in_container/ Для Gradle есть пример прямо от Ричардсона (выполняются примерно те шаги, что я описал выше): https://github.com/microservices-patterns/ftgo-application ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:36 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton Для gradle - тоже параметры передаются. Ну если все так сложно - то забей. Никто тебя не похвалит за поднятие докеров. Я так думаю. Особенно когда речь касается рабочих станций девелоперов. Забей короче. Не нужен тебе тест такой ценой. Пользы мало. А конфигурационных проблем масса. Так вот я эту мысль и хотел озвучить - идея теста просто прекрасна- мы по сути отестим целое направление сервиса плюсы= никаких - так как при любом измененнии как на стороне продюсера так и на стороне консумера - вы будете править не код,а сам тест минусы- достаточно сложная разработка с участием девопса по поднятию тестовой базы на другой стороне весов есть некий Петро,который умеет пользваться постманом и pg4admin он должен взять джейсон из корня проекта,положить его в тело запроса и послать запрос зайти в базу и посмотреть на эту запись на все про все 3 минуты ,если особо тупой QA то 10 минут как часто нужно проводить такой тест- с той же частой ,с которой меняется дто - которым вы обмениваетесь с внешним ресурсом- тоесть в теории это один раз в год теперь давайте посчитаем финансы 10 минут времени QA раз в год или все таки разработка теста + акутализация раз в год я думаю даже Петро сможет увидеть разницу) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:44 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Lelouch asv79 Но я отвечу за тебя,чтоб ты не мучался - ты не сможешь этого сделать для начала тебе нужен рест темплейт- чтобы отостлать сабж своему приложению далее начинается проблема - чтобы твое приложение приняло запос - нужно использвать сприг бут тест ,который не совместим с тестом базы и скорей всего и кафкой ты начнешь клепать моки - и я скажу тебе давай до свиданья!) 1) Собираешь контейнер со своим приложением 2) Через docker compose поднимаешь приложение и необходимое окружение 3) Выполняешь тесты Вот тут есть что-то похожее на пример для maven + testcontainers: https://bsideup.github.io/posts/spring_boot_in_container/ Для Gradle есть пример прямо от Ричардсона (выполняются примерно те шаги, что я описал выше): https://github.com/microservices-patterns/ftgo-application так не пойдет нужен рабочий пример с простейшим круд приложением - я думаю если вы начнете его делать - то мы про вас на неделю забудем) собрать контейнер со своим приложением - уже звучит очень весело) у нас там на кафку одну безопасности всякой столько что устанешь печатать ... вообщем лелуч - ждем от вас рабочий пример обычнго рест апи круд приложения - с тестированием слова это все легко и вот тут все есть - не принимаются ,ибо все мы знаем что такое конфигурация ) Я тебе сразу говорю что в рамках одного теста это не получится Ты говоришь получится- покажи код ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:48 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
[quot asv79#22338856] mayton как часто нужно проводить такой тест- с той же частой ,с которой меняется дто - которым вы обмениваетесь с внешним ресурсом- тоесть в теории это один раз в год Вообще - нет Тест может сломать: 1) Изменение DTO 2) Изменение контроллера 3) Изменение настроек (например, поменяли context path) 4) Любое изменение бизнес-логики (например, сообщение должно долетать до БД не на каждый запрос) 5) Изменение структуры БД 6) Изменение сообщений, передаваемых через брокер 7) etc По факту, если этот сценарий для бизнеса критичен - то этот тест вообще будет входить в каждый регресс при релизе версии ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:50 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 Lelouch пропущено... 1) Собираешь контейнер со своим приложением 2) Через docker compose поднимаешь приложение и необходимое окружение 3) Выполняешь тесты Вот тут есть что-то похожее на пример для maven + testcontainers: https://bsideup.github.io/posts/spring_boot_in_container/ Для Gradle есть пример прямо от Ричардсона (выполняются примерно те шаги, что я описал выше): https://github.com/microservices-patterns/ftgo-application так не пойдет нужен рабочий пример с простейшим круд приложением - я думаю если вы начнете его делать - то мы про вас на неделю забудем) собрать контейнер со своим приложением - уже звучит очень весело) у нас там на кафку одну безопасности всякой столько что устанешь печатать ... вообщем лелуч - ждем от вас рабочий пример обычнго рест апи круд приложения - с тестированием слова это все легко и вот тут все есть - не принимаются ,ибо все мы знаем что такое конфигурация ) Я тебе сразу говорю что в рамках одного теста это не получится Ты говоришь получится- покажи код Хорошо, вы оплачиваете мое время из расчета 2к/час и я предоставляю вам такой код, идет?) Простите, бесплатно писать то, что вы сами можете собрать по ссылкам я что-то не хочу) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:52 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
[quot Lelouch#22338863] asv79 пропущено... Вообще - нет Тест может сломать: 1) Изменение DTO 2) Изменение контроллера 3) Изменение настроек (например, поменяли context path) 4) Любое изменение бизнес-логики (например, сообщение должно долетать до БД не на каждый запрос) 5) Изменение структуры БД 6) Изменение сообщений, передаваемых через брокер 7) etc По факту, если этот сценарий для бизнеса критичен - то этот тест вообще будет входить в каждый регресс при релизе версии тут ты не прав первый вопрос зачем контроллер? это кафка вообщето( контролер нужен лишь для теста послать самому себе сообщение) второй ворпос по всех озвученных вами пунктах что вы будете делать? менять код теста и менять код консумера- насколько это дороже ,чем 5 минут времени QA ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:54 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 Lelouch пропущено... тут ты не прав первый вопрос зачем контроллер? это кафка вообщето( контролер нужен лишь для теста послать самому себе сообщение) второй ворпос по всех озвученных вами пунктах что вы будете делать? менять код теста и менять код консумера- насколько это дороже ,чем 5 минут времени QA 5 минут времени QA * 100 критических тесткейсов - это внезапно 2 человеко-дня тестирования. (обшибся в первый раз) Если это необходимо выполнять при каждом выпуске версии, то экономия очевидна ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:57 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Lelouch Хорошо, вы оплачиваете мое время из расчета 2к/час и я предоставляю вам такой код, идет?) Простите, бесплатно писать то, что вы сами можете собрать по ссылкам я что-то не хочу) а зачем вы пишите тут что то бесплатно уже 2й час? кто вам оплатит 4 тысячи? я точно не буду) я так понимаю если вы вошли в тему то нужно что то показать,ссылки это хорошо,но где рабочий пример простейший круд с кафкой и его тест - генерация минут 10 через спринг.io с 1 контроллером 1 сущностью 1 репой 1 кафкой ну и далее ваш тест который получит в рест объект - пошлет его по кафке- вы его в тесте получите - запишите в базу и проверите что туда положили- звучит просто ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 20:59 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 Lelouch Хорошо, вы оплачиваете мое время из расчета 2к/час и я предоставляю вам такой код, идет?) Простите, бесплатно писать то, что вы сами можете собрать по ссылкам я что-то не хочу) а зачем вы пишите тут что то бесплатно уже 2й час? кто вам оплатит 4 тысячи? я точно не буду) я так понимаю если вы вошли в тему то нужно что то показать,ссылки это хорошо,но где рабочий пример простейший круд с кафкой и его тест - генерация минут 10 через спринг.io с 1 контроллером 1 сущностью 1 репой 1 кафкой ну и далее ваш тест который получит в рест объект - пошлет его по кафке- вы его в тесте получите - запишите в базу и проверите что туда положили- звучит просто Ссылки покидать можно и бесплатно) Бесплатно писать код - я лучше issue в каком-нибудь открытом проекте поправлю) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 21:01 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Lelouch asv79 пропущено... 5 минут времени QA * 100 критических тесткейсов - это внезапно 2 человеко-дня тестирования. (обшибся в первый раз) Если это необходимо выполнять при каждом выпуске версии, то экономия очевидна откуда взялись 100 тест кейсов ? как мы с вами выснили ранее такие кейсы возникают лишь при смене дто,все остальное от лукавого если логика меняется - причем тут ДТО - меняйте сколько хотите - наш тест должен показат что то что мы положили в контроллер придет через кафку и ляжет в бд в том же виде тоесть юзкейс тут только один- изменение ДТО - и как я выше писал это в лучшем случае 1 раз в год,по факту никогда теперь давайте еще раз посчтиаем финансы ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 21:03 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Lelouch asv79 пропущено... а зачем вы пишите тут что то бесплатно уже 2й час? кто вам оплатит 4 тысячи? я точно не буду) я так понимаю если вы вошли в тему то нужно что то показать,ссылки это хорошо,но где рабочий пример простейший круд с кафкой и его тест - генерация минут 10 через спринг.io с 1 контроллером 1 сущностью 1 репой 1 кафкой ну и далее ваш тест который получит в рест объект - пошлет его по кафке- вы его в тесте получите - запишите в базу и проверите что туда положили- звучит просто Ссылки покидать можно и бесплатно) Бесплатно писать код - я лучше issue в каком-нибудь открытом проекте поправлю) ты только что написал что твое время стоит 2 к/час- при этом ты уже 2й час тут пишешь ни о чем и самое интересное - врядли тебе за это кто то заплати- получается некий дисонанс) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 21:05 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
я собственно не имею к тебе претензий лелуч) мое хотение чтобы это топик прочитали лиды и может быть почесали голову - а может и правда дешевле QA чем разрабов насиловать вот таким вот ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 21:07 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 Так вот я эту мысль и хотел озвучить - идея теста просто прекрасна- мы по сути отестим целое направление сервиса плюсы= никаких - так как при любом измененнии как на стороне продюсера так и на стороне консумера - вы будете править не код,а сам тест минусы- достаточно сложная разработка с участием девопса по поднятию тестовой базы на другой стороне весов есть некий Петро,который умеет пользваться постманом и pg4admin он должен взять джейсон из корня проекта,положить его в тело запроса и послать запрос зайти в базу и посмотреть на эту запись на все про все 3 минуты ,если особо тупой QA то 10 минут Мне сложно обсуждать цифры. 3 минуты или 10 минут или раз в год. Но мой опыт подсказывает что ты занят ерундой. Я думаю что у тебя на проекте есть тонна другой полезной работы кода надо применить свои знания. Если ты занимаешся этим просто изучая докер (resume-driven-development) - то я одобрительно промолчу. Делай. Изучай. Но не стоит это преподносить как панацею. Скорее просто тебе так хочется. Самый лучший судья тебе в этом - это code-review тоих коллег. Скорее всего они будут тебя бить за такое нововведение. Первый-же авто-тест со стороны QA мнгновенно проверить всю твою интеграцию и даже лучше и шире во все стороны. А твой докер - будет лишним балластом и скорее всего и его выкинут из проекта. Это вобщем моё IMHO. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 21:10 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79 Так вот я эту мысль и хотел озвучить - идея теста просто прекрасна- мы по сути отестим целое направление сервиса плюсы= никаких - так как при любом измененнии как на стороне продюсера так и на стороне консумера - вы будете править не код,а сам тест минусы- достаточно сложная разработка с участием девопса по поднятию тестовой базы на другой стороне весов есть некий Петро,который умеет пользваться постманом и pg4admin он должен взять джейсон из корня проекта,положить его в тело запроса и послать запрос зайти в базу и посмотреть на эту запись на все про все 3 минуты ,если особо тупой QA то 10 минут Мне сложно обсуждать цифры. 3 минуты или 10 минут или раз в год. Но мой опыт подсказывает что ты занят ерундой. Я думаю что у тебя на проекте есть тонна другой полезной работы кода надо применить свои знания. Если ты занимаешся этим просто изучая докер (resume-driven-development) - то я одобрительно промолчу. Делай. Изучай. Но не стоит это преподносить как панацею. Скорее просто тебе так хочется. Самый лучший судья тебе в этом - это code-review тоих коллег. Скорее всего они будут тебя бить за такое нововведение. Первый-же авто-тест со стороны QA мнгновенно проверить всю твою интеграцию и даже лучше и шире во все стороны. А твой докер - будет лишним балластом и скорее всего и его выкинут из проекта. Это вобщем моё IMHO. в реальности у меня на спринте задача проверить работу нашей интеграции через кафку с внешним сервисом и я решил тут это дело автоматизировать и понял насколько это будет трудоемко ,ну и фактически все равно это будет синтетика ( в случае с кафкой- она по другому тестрированию не поддается) ну и тут отписался еще раз на всякий случай о том ,насколько беспомощна нынешняя система тестирования тот кто выпустит фреймворк который позволит на вход давать а и получать ее на выходе -выйграет) сейчас такое тестирование сродни построению какой то мкс- так как приложение имеет тонны завимостей,часть из которых в докере ,часть в облаке и тд поэтому конечно пока QA) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 21:20 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79, Ладно, вот какой-то (не очень хороший, например захардкодил имя образа) пример с testcontainers. Примерно за 1 час и сделал (основная проблема была не в докере, я с запросом ошибся XD) Запуск с тестами - mvn verify P.S. мне честно лень делать пример с docker compose + Maven, по идее можно начинать копать с вот этого плагина: https://dmp.fabric8.io. Ну или например: https://github.com/daggerok/docker-compose-maven-plugin-example ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2021, 23:15 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 в реальности у меня на спринте задача проверить работу нашей интеграции через кафку с внешним сервисом и я решил тут это дело автоматизировать и понял насколько это будет трудоемко ,ну и фактически все равно это будет синтетика ( в случае с кафкой- она по другому тестрированию не поддается) ну и тут отписался еще раз на всякий случай о том ,насколько беспомощна нынешняя система тестирования тот кто выпустит фреймворк который позволит на вход давать а и получать ее на выходе -выйграет) сейчас такое тестирование сродни построению какой то мкс- так как приложение имеет тонны завимостей,часть из которых в докере ,часть в облаке и тд поэтому конечно пока QA) Ну дык правильно любой интеграционный тест, это сложно. А уж тестирование интеграции, это сложно в кубе. И кафка тут не при чем. Самый простой способ, это подготовить тестовые кейсы. Т.е. на вход подаем такие данные, на выходе получаем вот такие данные. Для начала подготовить необходимый минимум. Т.е. правильный вход - правильный результат. Много данных не надо, только то что действительно нужно. А далее по мере эксплуатации добавлять тесты с данными, на которых возникали ошибки. При этом должны быть "тестовая" среда. Имхо, можно напрячь девопсов, чтобы они для прогона тестов поднимали, в кубере например, нужные докер образы (типа моков). А в тестируемое приложение передавались параметры, что где лежит. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2021, 07:38 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Lelouch asv79, Ладно, вот какой-то (не очень хороший, например захардкодил имя образа) пример с testcontainers. Примерно за 1 час и сделал (основная проблема была не в докере, я с запросом ошибся XD) Запуск с тестами - mvn verify P.S. мне честно лень делать пример с docker compose + Maven, по идее можно начинать копать с вот этого плагина: https://dmp.fabric8.io. Ну или например: https://github.com/daggerok/docker-compose-maven-plugin-example то что вы сделали делается одной анотацией @DataJpaTest за одну минуту вопрос был как затетист цепочку из реста+ кафка+ репа ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 10:37 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 то что вы сделали делается одной анотацией @DataJpaTest за одну минуту вопрос был как затетист цепочку из реста+ кафка+ репа Хм... зачем в этой цепочке кафка? А так реста + кафка, можно тестировать через embedded kafka Аналогично можно протестировать кафка + репа. <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 11:50 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul asv79 то что вы сделали делается одной анотацией @DataJpaTest за одну минуту вопрос был как затетист цепочку из реста+ кафка+ репа Хм... зачем в этой цепочке кафка? А так реста + кафка, можно тестировать через embedded kafka Аналогично можно протестировать кафка + репа. <:o) а зачем мне тестиовать эмдбдед кафка,которая к моей кафке имеет такое же отношение как я к балету? мне нужно тестировать мою кафку с моими настройками,а зачем мне настроить эмбдед кафку и ее же тестировать?)) это что то сродни - давай я протестирую секс с негритянкой - ну на тебе шоколадный пирог )) я про что и говорю нет инструментов то то для тестирования нормальных. вот если бы можно было поднять в тест контейнере реплику вашего приложения со всеми зависимостями и получить некий апи- чтобы я мог перед деплоем автомтически послалатьна тестовый рест себе некий джейсон и потом силами этого чудо фремворка посмотреть что легло в базу вот что я хочу ,а вся эта тест чехарда с эмбдед базами и кафками- анонизм - не несущий ничего кроме денег на ветер) единственно что хочу отметить - очень неплохая либа по тестированию дата слоя zonki,очень крутой инструмент которой реплицируют вашу бд из миграциионных скриптов,использует ваши интерфейсы и по сути является почти тем ,что я хочу ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 12:27 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 mad_nazgul пропущено... Хм... зачем в этой цепочке кафка? А так реста + кафка, можно тестировать через embedded kafka Аналогично можно протестировать кафка + репа. <:o) а зачем мне тестиовать эмдбдед кафка,которая к моей кафке имеет такое же отношение как я к балету? мне нужно тестировать мою кафку с моими настройками,а зачем мне настроить эмбдед кафку и ее же тестировать?)) С моей точки зрения тестировать кафку - это все равно что тестировать tcp-проткол. Что ты протестируешь? Что месседж ходит по ней? Или что пароль подошёл. В этой схеме ты тестируешь буквально настройки на соответсвие. А это вынуждает тебя хранить в тестах полную копию настроек что само по себе ОООЧЕНЬ странно. Другие разрабы подумают что ты нашел очень забористый кальян. Покурил его и вдруг... придумал тестить настройки протокола. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 13:29 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton asv79 пропущено... а зачем мне тестиовать эмдбдед кафка,которая к моей кафке имеет такое же отношение как я к балету? мне нужно тестировать мою кафку с моими настройками,а зачем мне настроить эмбдед кафку и ее же тестировать?)) С моей точки зрения тестировать кафку - это все равно что тестировать tcp-проткол. Что ты протестируешь? Что месседж ходит по ней? Или что пароль подошёл. В этой схеме ты тестируешь буквально настройки на соответсвие. А это вынуждает тебя хранить в тестах полную копию настроек что само по себе ОООЧЕНЬ странно. Другие разрабы подумают что ты нашел очень забористый кальян. Покурил его и вдруг... придумал тестить настройки протокола. я думаю это дело времени - когда напишут такую либу для даты уже есть зонки- которое на вход берет твои рабочие конфиги( ничего не надо нигдк проиписывать сам все найдет) и генерирует в докере инстанс твоей бд- это очень круто,ребята прям молодцы тоже самое бы и для приложения целиком - некая либа генерирует в докере инстанст твоего приложения и дает тебе апи для написания удобных тестов- например sendT0Controoler("/fdf",Object o) и этот метод шлет твоему приложению этот объект ,оно его обрабатывает и ты его можешь например посмотреть в бд- каким то методом типо getFromDb( "tableName",...) вот это бы уже было похоже на что то полезное - и ведь я думаю что для ребят ,которые такие фрймворки пишут - задача то прям не сильно чтобы сложная ) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 15:44 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 а зачем мне тестиовать эмдбдед кафка,которая к моей кафке имеет такое же отношение как я к балету? мне нужно тестировать мою кафку с моими настройками,а зачем мне настроить эмбдед кафку и ее же тестировать?)) Потому что kafka тестировать не надо. Тестировать настройки... Может быть вы ещё тестируете подключение jdbc-драйверов к БД?! ИМХО в большинстве случаев для работы с kafka, нужно указать аннотацию @KafkaListener (с нужными параметрами) для получения данных. И использовать kafkaTemplate для передачи данных. Embedded Kafka позволяет протестировать прием и передачу данных. Как бы хозяин-барин. Я просто предложил рассмотреть такое решение. <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 16:17 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Просто господа ушли от конкретной темы тестирования приватного метода в бла бла ни о чем. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 17:44 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul asv79 а зачем мне тестиовать эмдбдед кафка,которая к моей кафке имеет такое же отношение как я к балету? мне нужно тестировать мою кафку с моими настройками,а зачем мне настроить эмбдед кафку и ее же тестировать?)) Потому что kafka тестировать не надо. Тестировать настройки... Может быть вы ещё тестируете подключение jdbc-драйверов к БД?! ИМХО в большинстве случаев для работы с kafka, нужно указать аннотацию @KafkaListener (с нужными параметрами) для получения данных. И использовать kafkaTemplate для передачи данных. Embedded Kafka позволяет протестировать прием и передачу данных. Как бы хозяин-барин. Я просто предложил рассмотреть такое решение. <:o) а зачем мне тестировать то,что у меня на проекте не будет в работе? параметры как раз таки важны - там столько настоект безопасности и прочего что видя эту ямл портянку становится худо) @Embded kaffku я знаю,не понимаю просто для чего она - если я хочу тестировать боинг а мне посовывают жигули с аргументами - а шо боенг тестировать он и в африке боинг ,бери жигули - поедут если ,значит и боенг поедет)))ну вот щас это как то так выглядит) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 18:00 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 а зачем мне тестировать то,что у меня на проекте не будет в работе? параметры как раз таки важны - там столько настоект безопасности и прочего что видя эту ямл портянку становится худо) @Embded kaffku я знаю,не понимаю просто для чего она - если я хочу тестировать боинг а мне посовывают жигули с аргументами - а шо боенг тестировать он и в африке боинг ,бери жигули - поедут если ,значит и боенг поедет)))ну вот щас это как то так выглядит) Тестировать боинг на живую дорого. Вам предлагают аэродинамическую трубу, в которой можно протестировать макет боинга. А вы говорите, что на макете нельзя протестировать обивку салона. <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 18:30 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul Тестировать боинг на живую дорого. Вам предлагают аэродинамическую трубу, в которой можно протестировать макет боинга. А вы говорите, что на макете нельзя протестировать обивку салона. <:o) а также нельзя протестировать взлет и посадку- а лишь получить динамический коэф сопротивления))) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 19:18 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mad_nazgul Тестировать боинг на живую дорого. вот наконец то до истины добрались ) тестирование в трубе дешево - но не даст ни каких результатов- в трубе нельзя взлететь или посадить самолет,испытать шасси и управление) зато это дешево ,а мой вопрос тогда зачем вообще что то тестироовать ? если фактически сейчас все тесты это голимая синтетика = считай твоя труба- причем и это далеко не дешево и эти тесты не отражают толком ничего ,кроме человеко часов ,которые были потрачены впустую разработчиками так еще все это надо поддерживать лучший тест боинга - это летчик испытатель лучший тест вашего приложения это тестиовщик все остальное - называемое тестами- это такое себе ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 19:24 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79, Долой экзамены в школах. Это тесты! Че за бред какой то) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 19:45 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Тема интересная. Позвольте мне тоже тогда позадавать пару вопросов: 1. Есть у нас маппер. На входе у него объект, полученный из xml - все уровни вложенности исходной xml в объекте сохранены, на выходе - плоская entity для базы. У входного объекта около 50-60 полей (так сложилось). Поля перекладываются со всякими разными обработками - много if'ов (если это и это поле заполнены, то заполни поле так-то), каких-то обработок строк, дат и т.д. Для удобства навигации по классу все обработки разбиты на методы согласно вложенности xml (ну, в разумных пределах). И эти методы приватные. С одной стороны понятно, что можно тестировать через public метод маппера, но тогда проверка правильности обработки какого-нибудь глубоко вложенного поля весьма затратно по времени (надо ведь до этого поля еще по всем условиям добраться) С другой стороны, если написать тесты на каждый метод отдельно (например с использованием библиотечки WhiteBox), то это позволяет проверить маппинг конкретных полей быстрее и проще Вот как лучше все же поступать? (Хотя вы тут 8 страниц обсуждали, что тестить private методы - это фуфу =) ) 2. Упоминалось, что наличие mock'ов и PowerMock - это плохой тон. Можно ли чуть подробнее, почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 21:46 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Timein, Надо убрать из маппинга БЛ и тестировать будет нечего. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 07:13 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Timein, Надо убрать из маппинга БЛ и тестировать будет нечего. а куда ее убрать-то? Где-то все равно эти обработки должны быть ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 10:16 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Timein PetroNotC Sharp Timein, Надо убрать из маппинга БЛ и тестировать будет нечего. а куда ее убрать-то? Где-то все равно эти обработки должны быть Вы опишите что там у вас сложного ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 10:28 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Timein, Или например маппинг входа - усложнили что xml а не json - усложнили что 60 полей - усложнили что "куча if" А теперь спрашиваете как тестировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 10:31 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Timein PetroNotC Sharp Timein, Надо убрать из маппинга БЛ и тестировать будет нечего. а куда ее убрать-то? Где-то все равно эти обработки должны быть Я думаю что он прав. Если разделить эту логику на два слоя. 1) Слой мапперов (XML -> StructuredJavaObject -> PlainJavaObject) 2) Слой всяких там if-else После этого тестирование упрощается. Да ... и когда мы тестим вход с 7-15 dimensions то лучше писать модульные тесты которые покроют основные кейсы. И PBT-tests что-б покрыть 100500 миллиардов прочих технических кейсов. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 10:49 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton, Согласен. Вообще сам рест придуман чтобы стандартно передавать один объект без связей чем один боооольшой большой бизнес Обь ект. Сам тренд счас в делении (микросервисы) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 10:56 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
mayton, Я могу путаться в терминологии. Я правильно понимаю, что предполагается: 1) поля StructuredJavaObject впрямую переложить в PlainJavaObject1 (как есть, один к одному) 2) Из PlainJavaObject1 переложить с обработкой в PlainJavaObject2 (так как состав полей может не совпадать) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 11:17 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Timein, Если не бъет состав полей, то это ерунда. Решаетя маппингом аннотациями. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 11:25 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, а можно немного подробнее каким образом? К примеру, в первом объекте у меня два поля - число и строка, а во втором пять - число и пять строк. Строка из первого объекта парсится по определенным условиям и полученные значения раскладываются по пяти полям. Как аннотацией и какой это можно сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 11:45 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 а также нельзя протестировать взлет и посадку- а лишь получить динамический коэф сопротивления))) Которого вполне достаточно чтобы судить о взлете и посадке. Т.к. в аэродинамической трубе моно протестировать и подъёмную силу. <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 11:51 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Timein, Это нельзя. Либо клиент не шлет вам всякую херню, либо это БЛ и вы всякую херню пропускаете в валидатор слоя БЛ и приводите к нормальному виду. То есть требуется сущность Юзверь а вам присылают json Футболист. Вот вы в слое БЛ конвертите его в другую сущность. И тест на конвертацию класса одного в другой. Причем тут маппинг? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 11:59 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Timein, Почему по контракту приход сущности юзверь, а приходит Футболист? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 12:01 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Timein, Это нельзя. Либо клиент не шлет вам всякую херню, либо это БЛ и вы всякую херню пропускаете в валидатор слоя БЛ и приводите к нормальному виду. То есть требуется сущность Юзверь а вам присылают json Футболист. Вот вы в слое БЛ конвертите его в другую сущность. И тест на конвертацию класса одного в другой. Причем тут маппинг? Я вполне могу путаться в терминологии. С моей точки зрения это реально просто маппинг - из полей одного объекта в поля другого объекта. Ну не знаю, давайте Converter назовем, если маппер под такое не подходит Если подкините какую-нибудь хорошую статью по архитектуре (правильному разбиению на классы и слои) приложений типа "получить данные - преобразовать данные - положить в базу", буду рад ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 12:12 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Timein, Точной границы маппинга и конвертера нету. Увы. Имхо если аннотации простые вкл, выкл то маппинг. Если сложнее то бери как есть и внизу на бэке конвертируй. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 12:20 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Timein mayton, Я могу путаться в терминологии. Я правильно понимаю, что предполагается: 1) поля StructuredJavaObject впрямую переложить в PlainJavaObject1 (как есть, один к одному) 2) Из PlainJavaObject1 переложить с обработкой в PlainJavaObject2 (так как состав полей может не совпадать) Да. Но я говорю предложение по реализации исходя только из твоих слов. Исходника не видел. А он может прояснить больше деталей. Может есть и еще более простое решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 14:05 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Timein Тема интересная. Позвольте мне тоже тогда позадавать пару вопросов: 1. Есть у нас маппер. На входе у него объект, полученный из xml - все уровни вложенности исходной xml в объекте сохранены, на выходе - плоская entity для базы. У входного объекта около 50-60 полей (так сложилось). Поля перекладываются со всякими разными обработками - много if'ов (если это и это поле заполнены, то заполни поле так-то), каких-то обработок строк, дат и т.д. Для удобства навигации по классу все обработки разбиты на методы согласно вложенности xml (ну, в разумных пределах). И эти методы приватные. С одной стороны понятно, что можно тестировать через public метод маппера, но тогда проверка правильности обработки какого-нибудь глубоко вложенного поля весьма затратно по времени (надо ведь до этого поля еще по всем условиям добраться) С другой стороны, если написать тесты на каждый метод отдельно (например с использованием библиотечки WhiteBox), то это позволяет проверить маппинг конкретных полей быстрее и проще TimeinВот как лучше все же поступать? (Хотя вы тут 8 страниц обсуждали, что тестить private методы - это фуфу =) )Часть этих восьми страниц - это как раз спор о том "это фуфу" или это просто "меньшее из зол". Этот вопрос не был решен, и стороны не согласны. На мой пример тоже никто не смог придумать как удобно протестировать и одновременно сохранить инкапсуляцию.. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 14:23 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, >Это тоже хороший пример когда ради удобного тестирования прийдется нарушать инкапсуляцию. = я бы написал, ради удобного тестирования надо убрать архитектурные косяки в проекте) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 14:29 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Часть этих восьми страниц - это как раз спор о том "это фуфу" или это просто "меньшее из зол". Этот вопрос не был решен, и стороны не согласны. На мой пример тоже никто не смог придумать как удобно протестировать и одновременно сохранить инкапсуляцию.. Ты про собственные рукотворные хеш-таблицы? Я думаю что для 80% бизнес-кода (который тут обычно обсуждают) должен следовать принципу SingleResponsibility и этот вопрос решен автоматом. Автор выше хотел сделать несколько ответсвтенностей на одном классе и понял что растет сложность тестирования. Комбинаторно растет. Оставшиеся редкие артефакты.... как-то твои хеш-таблички или мои графы или еще бох знает какие тонкие материи дейтвительно можно взламывать, инструментировать и достигать каких-то своих целей. В языках наподобие С++ для этого есть пре-процессор или макро-процессор. А у нас... ну вот у нас всякие подлые штучки типа Мокито. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 14:32 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
maytonТы про собственные рукотворные хеш-таблицы?Нет, я про проблему с командами для роботов. maytonА у нас... ну вот у нас всякие подлые штучки типа Мокито.Во-первых, мокито нарушает инкапсуляцию еще больше чем открытие private методов (мы знаем какой конкретно метод какой код будет вызывать). А во-вторых.. я в принципе не понимаю причем он тут. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 15:07 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, Ну вот. Когда нет конкретики, нет и разговора для обсуждения. Нечего обсуждать. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 15:16 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
А что за команды для роботов? Сорян.. я видимо где-то пропустил. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 15:18 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
если уж говорить о тестиовании приватных методов -и возникла такая необходимость обявить их пекейдж приватными я у себя как раз так и сделал ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 15:32 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
asv79 Lelouch asv79, Ладно, вот какой-то (не очень хороший, например захардкодил имя образа) пример с testcontainers. Примерно за 1 час и сделал (основная проблема была не в докере, я с запросом ошибся XD) Запуск с тестами - mvn verify P.S. мне честно лень делать пример с docker compose + Maven, по идее можно начинать копать с вот этого плагина: https://dmp.fabric8.io. Ну или например: https://github.com/daggerok/docker-compose-maven-plugin-example то что вы сделали делается одной анотацией @DataJpaTest за одну минуту вопрос был как затетист цепочку из реста+ кафка+ репа Ну то есть поднять ещё 1 контейнер с Кафка вы по этому примеру не можете? И да, расскажите ка, как с помощью dataJpaTest протестировать rest api. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 22:10 |
|
Тестирование private методов
|
|||
---|---|---|---|
#18+
Вот выше советовали EmbedKafka. Вот Баелдунг пишет очередную статью на тему такого тестинга в Spring-application https://www.baeldung.com/spring-boot-kafka-testing По моему вполне себе удобно. Девопсовские вопросы... всякие там брокеры, кластеры, ЗУ-киперы, репликации нагрузки и SLA и перформанс можно другой темой толкнуть. Кто за? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 15:36 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2120410]: |
0ms |
get settings: |
28ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
3501ms |
get tp. blocked users: |
3ms |
others: | 377ms |
total: | 3993ms |
0 / 0 |