powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Тестирование private методов
215 сообщений из 215, показаны все 9 страниц
Тестирование private методов
    #40071905
da17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, подскажите, если у класса есть private метод, как его можно протестировать при помощи JUnit. Можно наверное его сделать public, состояние класса он не меняет и ничего страшного, но вот нигде кроме этого класса этот метод не нужен и хочется как-то иначе.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40071908
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кратко - не надо тестировать private методы.

Подробнее написано в куче мест, например:
https://anthonysciamanna.com/2016/02/14/should-private-methods-be-tested.html
...
Рейтинг: 0 / 0
Тестирование private методов
    #40071961
Но если все-таки захочется открыть метод, то его не обязательно делать public. Он может остаться package private ибо тесты обычно помещаются в тот же пакет что и тестируемые классы.

Ну еще есть вариант Reflection конечно, но выглядеть такой тест будет так себе :)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40071982
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно не надо тестировать private-методы. Если вы - owner кода - то сделайте его хотя-бы видимым
в области пакета.

Если код не ваш и чужой то тем более не стоит тестировать. Его владалец может в новой версии удалить этот
метод и что вы будете с этим фактом делать.

Я думаю что тема технически перекликается с модульностью (java9-modules) и обсуждать ее надо именно
в таком ключе. Не ломать и хачить приватное, а разбираться почему вообще этот метод приватный и что за
функционал от него нам понадобилось тестировать, и компетентны ли МЫ вообще брать информацию из
чего-то внутреннего и закрытого от спецификаций.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40072212
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если хочешь тестировать private методы- самое верное решение сделать из package private
то есть в сигнатуре метода просто убрать модификатор доступа
далее просто сгенерировать тесты на нужный класс- автоматом создаться пакет - в котором эти методы будут видны
ну и извне эти методы не буду видны,как и private- тоесть безопасность не пострадает
...
Рейтинг: 0 / 0
Тестирование private методов
    #40072214
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Конечно не надо тестировать private-методы.

тут ты не прав- по факту все методы в коде private- кроме тех,что торчат на контроллерах- и все это нужно тестировать
поэтому такие ситуации обыгрываются как package-private
а тестировать надо обязательно иначе на прод будет уезжать то,чего вы не ждали
...
Рейтинг: 0 / 0
Тестирование private методов
    #40072220
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
mayton
Конечно не надо тестировать private-методы.

тут ты не прав- по факту все методы в коде private- кроме тех,что торчат на контроллерах- и все это нужно тестировать
поэтому такие ситуации обыгрываются как package-private
а тестировать надо обязательно иначе на прод будет уезжать то,чего вы не ждали

Приведи пример кода где тебе очень-очень нужно тестировать что-то приватное.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40072230
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
легко- те же самые маперы
...
Рейтинг: 0 / 0
Тестирование private методов
    #40072241
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все равно непонятно.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073060
da17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот решил попробовать Junit 5 и там уже кстати вроде разрешили тестить private методы. Хотя на своем примеры сам натолкнулся на то, что это не ОК, когда передал на вход ф-ии некорректные данные.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073071
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должен быть принцип тестирования ящика. Подал а вход что-то. Проверил на выходе нечто.

А если тебе надо взломать ящик - то тут... вроде как декомпозиция была сделана неверно.
Тоесть тут уже либо SingleResp/OpenClosed либо взламывай private но тогда не жалуйся
что плохое ООП.

Абсурд получается. С одной стороны на каждом собесе тебя спросят зачем нужно сокрытие
и с другой стороны ты сам-же пытаешся его нарушить в тестах. А тесты - это иммитация
эксплуатации системы.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073085
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
da17,
Дай пример метода и пример кода.
Ведь он никому больше в ИС не нужен кроме этого класса?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073090
da17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp, а я подумал и понял идею о том, что не надо тестировать private методы. Если еще смогу придумать зачем это надо, пока все понял.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073213
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79
пропущено...

тут ты не прав- по факту все методы в коде private- кроме тех,что торчат на контроллерах- и все это нужно тестировать
поэтому такие ситуации обыгрываются как package-private
а тестировать надо обязательно иначе на прод будет уезжать то,чего вы не ждали

Приведи пример кода где тебе очень-очень нужно тестировать что-то приватное.

имхо если хочется приватное что то тестировать то мне в скале нравится подход с хелпер объектами. ну или в джавке - статические методы в классе который не инстанциируется. оч круто.

я иногда так делаю и основной класс чище получается и потестить что то этакое можно. опять же оставляем хотя бы пакадж прайват.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073215
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
mayton
Конечно не надо тестировать private-методы.

тут ты не прав- по факту все методы в коде private- кроме тех,что торчат на контроллерах- и все это нужно тестировать
поэтому такие ситуации обыгрываются как package-private
а тестировать надо обязательно иначе на прод будет уезжать то,чего вы не ждали

так тестируй публичный метод который эти прайваты использует. или ты хочешь тестировать прайват методы в классе где никаких других кроме прайватов нет? :) и конструктар тоже прайват?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073531
gmugar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 и т.д.) не оправдание
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073558
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и есть хорошее правило что код должен быть - testable by design изначально.

Mockito/PowerMock - играют на особенностях ООП в Java но в то-же время противоречат идеям ООП в принципе.
Поэтому их нельзя считать "честным" тестированием. Тоже самое что если-бы С++ делали reinterpret_cast или что-то
подобное по отношению к инкапсулируемым полям.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073606
gmugar
Eсли класс нельзя на 100% покрыть тестами через его не приватный интерфейс - у тебя плохой дизайн класса. всегда. без исключений.
Логику очень часть неудобно покрывать через public интерфейс. Потому как наружу класс может отдавать только конечные результаты вычислений, а нам удобней протестировать сначала промежуточные результаты. В итоге нам приходится идти на поводу у тестов ухудшая дизайн: разбивать логику на доп классы или же открывать какие-то методы.

Реальный пример: есть робот который умеет переливать жидкость из пробирок в другие пробирки. Одна из команд представленна в виде: ВсосатьЖидкость(сколько, откуда, еще доп параметры) . Робот принимает на вход CSV, соответственно классу нужен только один публичный метод: toCsv(). Но в тестах парсить CSV для проверки расчетов очень не удобно из-за чего приходится открывать кой-какие внутренности.

А некоторые вещи тестировать через public API в принципе невозможно. Например, мы не можем протестировать в какой момент HashMap делает rehashing, хотя это обязательная составляющая алгоритма без которой весь класс превращается в тыкву.

В общем и целом вопреки всеобщему убеждению - тесты по большей части ухудшают дизайн нашего приложения, делая его более гибким (и соответственно сложным) без надобности, ну и открывая внутренности когда не надо.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073622
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном топике речь идет о тестах на correctness. Здесь мы проверяем бизнес сценарии использования компонентов.

Тесты перформанса (в т.ч) с использованием JMH - это отдельная и сложная тема. Они настолько не похожи
на тесты корректности что я-бы их даже не объединял. В проектах для них создают отдельные группы тестирования
и заводят отдельные фазы CI.

Вообще занятие задачами перформанса - последовательно "калечит код". Это фраза Шипилева. Он даже рисовал
кривую качества кода / перформанса и эта гривая имеля ярко выраженный экстремум. Тоесть была точка где
и код красив и перформанс - более-менее и дальше чтоб хоть немножко (на 2-3%) поднять speed-up нужно
было сломать 50% кода и сделать его нечитабельным и неудобным к использованию. Появляются работы
с byte[], char[], c пакетом unsafe e.t.c.

Яркий пример - BlockingQueue и Disruptor. Если их сравнивать по способу использования то видно что первый - удобен
а второй нет.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073639
gmugar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav BashkyrtsevЛогику очень часть неудобно покрывать через public интерфейс. Потому как наружу класс может отдавать только конечные результаты вычислений, а нам удобней протестировать сначала промежуточные результаты. В итоге нам приходится идти на поводу у тестов ухудшая дизайн: разбивать логику на доп классы или же открывать какие-то методы.

Реальный пример: есть робот который умеет переливать жидкость из пробирок в другие пробирки. Одна из команд представленна в виде: ВсосатьЖидкость(сколько, откуда, еще доп параметры). Робот принимает на вход CSV, соответственно классу нужен только один публичный метод: toCsv(). Но в тестах парсить CSV для проверки расчетов очень не удобно из-за чего приходится открывать кой-какие внутренности.
Это вот как раз и есть то, как делать нельзя. Никогда.
Вы тут фактически сказали "мне не удобно тестировать через честное паблик API класса, поэтому я буду срезать углы".
Тем самым закладываются сразу две мины:
1. вы протестировали класс не так как он будет реально использоваться.
2. вы подставили людей, которые при рефакторинге private кишок класса, напорятся на какие-то странные тесты.

Да, бывает протестировать класс сложнее чем его написать.
Да, бывает что тесты в разы больше по размеру, чем собственно лигика которую тестируют.
И наконец, если написать тест реально сдожно, это, опять же, яркий сигнал, что что-то не так с дизаном класса.

Но тестировать приваты - это не номральный путь. В нормальном проекте такое никогда не пройдет code review.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073684
maytonТесты перформанса (в т.ч) с использованием JMH - это отдельная и сложная тема.Я ничего не говорил про JMH и пр. Я не хочу сравнивать две реализации хеш таблиц, я хочу убедиться что свою хеш таблицу с external chaining'ом я реализовал правильно . Т.е. что сам алгоритм написан by the book. И это было бы легко сделать, если бы бакеты были доступны в тестах. Однако это нарушение инкапсуляции.
gmugarЭто вот как раз и есть то, как делать нельзя. Никогда.Сразу видно что веду дискуссию с опытным человеком :)
gmugar1. вы протестировали класс не так как он будет реально использоваться.Я протестирую его и через public API тоже. Но таких тестов я напишу меньше потому как мне останется проверить лишь то что в строку все собирается верно. А саму математику я смогу протестировать нарушив инкапсуляцию.
gmugar2. вы подставили людей, которые при рефакторинге private кишок класса, напорятся на какие-то странные тесты.В сложность создания и поддержки проекта входит как написание prod, так и тестового кода. Если мне при рефакторинге прийдется порефакторить так же тесты и я потрачу на это дополнительных 10 мин, я не буду сильно переживать. А если моему коллеге прийдется потратить доп день на написание сложных тестов в которых еще попробуй разберись потом, то не уверен что оценю этот труд. В какой-то момент эти тесты тоже прийдется рефакторить, а т.к. они будут сложными, то этот рефакторинг опять же усложнится.
gmugarИ наконец, если написать тест реально сдожно, это, опять же, яркий сигнал, что что-то не так с дизаном класса.Это уже какое-то новое правило, я тут идею не совсем понял. Почему сложные тесты - это сигнал плохого дизайна? Я видел много простых тестов в ужасных проектах. И там же видел много сложных тестов. И в хороших проектах видел и те, и другие. В общем не замечал пока никакой корреляции.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073689
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
maytonТесты перформанса (в т.ч) с использованием JMH - это отдельная и сложная тема.
Я ничего не говорил про JMH и пр. Я не хочу сравнивать две реализации хеш таблиц, я хочу убедиться что свою хеш таблицу с external chaining'ом я реализовал правильно . Т.е. что сам алгоритм написан by the book. И это было бы легко сделать, если бы бакеты были доступны в тестах. Однако это нарушение инкапсуляции.
Я понял ваш месседж. Я просто добавлю что есть некое промышленное тестирование качества бизнес-логики
которому вполне достаточно протестировать чёрный ящик. Если ящика по каким-то причинам не достаточно
- то его выбрасывают и берут другой ящик или декомпозицию на несколько более мелких.

То о чем рассказываете вы насколько далекО от тестинга качества бизнес-логики что его можно просто выделить в одельную
категорию и отменить для нее законы ООП. В самом деле. Зачем вам ООП когда вы создаете свою структуру данных.
Вот создайте ее. Доработайте до конца. И после этого уже займитесь инкапсуляцией. Это будет в духе SingleResp/OpenClosed.

Вот такое вот IMHO.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073763
gmugar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073802
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)Не верь всему что пишут на заборах.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073807
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,
+++

gmugar

Вы, уже несколько раз написали, что (в вашем примере) так делается потому что через public API тестировать сложно.
Но с каких пор "сложно" стало аргументом в пользу нарушения инкапсуляции?

А что есть инкапсуляция и что в ней настолько ценного, что ради нее нужно гланды череж ж... лечить?
Если инкапсуляция мешает разработке, тестированию, использованию в продуктиве - да ну нафиг такую инкапсуляцию.
Бизнес задачи писать/решать нужно, а не перед статуей инкапсуляции UML-диаграммы из распечатанных листингов выкладывать.

IMHO
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073813
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Stanislav Bashkyrtsev
пропущено...
Я ничего не говорил про JMH и пр. Я не хочу сравнивать две реализации хеш таблиц, я хочу убедиться что свою хеш таблицу с external chaining'ом я реализовал правильно . Т.е. что сам алгоритм написан by the book. И это было бы легко сделать, если бы бакеты были доступны в тестах. Однако это нарушение инкапсуляции.

Я понял ваш месседж. Я просто добавлю что есть некое промышленное тестирование качества бизнес-логики
которому вполне достаточно протестировать чёрный ящик. Если ящика по каким-то причинам не достаточно
- то его выбрасывают и берут другой ящик или декомпозицию на несколько более мелких.

То о чем рассказываете вы насколько далекО от тестинга качества бизнес-логики что его можно просто выделить в одельную
категорию и отменить для нее законы ООП. В самом деле. Зачем вам ООП когда вы создаете свою структуру данных.
Вот создайте ее. Доработайте до конца. И после этого уже займитесь инкапсуляцией. Это будет в духе SingleResp/OpenClosed.

Вот такое вот IMHO.

На мой взгляд - пример Stanislav Bashkyrtsev как раз таки достаточно близок к реальному миру.

совет:
"Зачем вам ООП когда вы создаете свою структуру данных. Вот создайте ее. Доработайте до конца. И после этого уже займитесь инкапсуляцией."

На мой взгляд за гранью добра и зла. Не бывает програмного кода/структуры данных который один раз создали, заинкапсулировали и больше не дорабатывают/не трогают. Это даже не фантазии, а полный отрыв от реальности.

Зачем после разработки заниматься инкапсуляцией - я вообще не понимаю. Да и модификатор доступа private то же не очень, чем мешает в реальной жизни замена private на protected - мне не сильно понятно.

IMHO

p.s. Что такое "SingleResp/OpenClosed" не знаю, фразы не понял.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073833
gmugar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsevp.s. Что такое "SingleResp/OpenClosed" не знаю, фразы не понял.

single-responsibility principle
open–closed principle
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073841
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Да все верно.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073846
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gmugar
open–closed principle

"закрыты для изменения" на мой взгяд, совершенно плохое сочитание слов. Значения вкладываемое в open-closed сильно отличается от их обычное значение в русском языке и противоречит их восприятию с точки зрения инкапсуляции и/или областей видимости.

private метод, который мешает/усложняет тестирование порожденных классов, как раз open-closed и противоречит

IMHO
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073853
Leonid Kudryavtsev
gmugar
open–closed principle

"закрыты для изменения" на мой взгяд, совершенно плохое сочитание слов. Значения вкладываемое в open-closed сильно отличается от их обычное значение в русском языке и противоречит их восприятию с точки зрения инкапсуляции и/или областей видимости.

private метод, который мешает/усложняет тестирование порожденных классов, как раз open-closed и противоречит
OCP - это когда для изменения поведения мы не лезем менять существующий код. Например, создаем новую сущность как в случае Decorator/Proxy. Или передаем Command/Strategy в класс вместо того чтоб прям в нем описывать разные стратегии поведения.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073867
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev

private метод, который мешает/усложняет тестирование порожденных классов, как раз open-closed и противоречит

IMHO

Нужно на конкретном примере рассмотреть. Мне кажется - что если приватный метод имеет смысл только
в контксте базового класса (хелпер, утилита) то нет смысла делать его protected т.к. его тело будет уже
мешать производному классу.

Впрочем, это философия. Весь SOLID - философия.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073905
da17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если что, то я уже все уяснил. А вот мне еще хотелось бы уточнить у более опытных коллег, теперь для тестирования часто приходится переделывать интерфейсы классов. Например был класс B который использовался в классе A и нигде более. Что бы протестировать поведение класса А пришлось B выносить наружу и передавать в конструктор, иначе не сделаешь его мок-объектом. Как-то вот странно все это.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073923
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT

так тестируй публичный метод который эти прайваты использует. или ты хочешь тестировать прайват методы в классе где никаких других кроме прайватов нет? :) и конструктар тоже прайват?


не все так однозначно- например паблик метод который дергает пару десятков мапперов и тд,которые приватны.
А если все это еще и в асинхрощине .
понятно что если отдать на вход а и получить то что ты хотел- оно хорошо и правильно ,значит все внутри работает,но бывает так что какой то хороший человек меняет что то в коде,сборщик падает с красным тестом- а там метод,который я описал выше и сразу не очень понятно что поломал этот человек- что по сути не есть хорошо - вот поэтому лучше сделать желаемые для тестов методы пекейдж приватными и тестировать сколько душе угодно.
Разраб же он какой- хочет на каждый баг по 4 часа из спринта- вникнуть в контекст,подебажить и тд- а тут куча мелких тестиков и сразу видно - ну вот же тут не тот тип данных или что то еще)
а если включиться в вашу философию то можно написать один тест на весь сервис ага работает ну и хрен с ним тогда)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40073941
da17
Если что, то я уже все уяснил. А вот мне еще хотелось бы уточнить у более опытных коллег, теперь для тестирования часто приходится переделывать интерфейсы классов. Например был класс B который использовался в классе A и нигде более. Что бы протестировать поведение класса А пришлось B выносить наружу и передавать в конструктор, иначе не сделаешь его мок-объектом. Как-то вот странно все это.
Используй здравый смысл. Вот мы несколько постов подряд и обсуждали как раз этот момент - что вроде как тесты хочется написать на что-то скрытое внутри, но при этом это скрытое не хочется открывать. И как видишь однозначного ответа здесь нет.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40074246
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
da17
Если что, то я уже все уяснил. А вот мне еще хотелось бы уточнить у более опытных коллег, теперь для тестирования часто приходится переделывать интерфейсы классов. Например был класс B который использовался в классе A и нигде более. Что бы протестировать поведение класса А пришлось B выносить наружу и передавать в конструктор, иначе не сделаешь его мок-объектом. Как-то вот странно все это.


Дык понятно странно.
Т.к. "по правильному" нужно в начале писать unit-test, а потом делать реализацию.
Наоборот получается дико не удобно.

В таком случае, лучше "забить" на unit-test.

А написать интеграционный тест, который тестирует часть бизнес-логики.
И мокать в лучшем случае работу с БД (ну или другим хранилищем данных).

Тестировать всю цепочку объектов.

При этом не надо стремиться к 100% покрытию тестами.
Только success-варианты.

Остальное валить в Exception.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40074300
mad_nazgul , эм.. вообще результат не должен зависеть от того как ты к нему пришел. Кто-то использует TDD, кто-то нет, но количество и качество тестов не должно зависеть от этого.

TDD в некоторых случаях ускоряет написание prod кода. Кто-то им не пользуется и возможно в некоторых ситуациях пишет prod код медленней, соответственно это минус один бонус. Но остальные бонусы тестов (как модульных, так и других) остаются актуальными.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40074421
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
mad_nazgul , эм.. вообще результат не должен зависеть от того как ты к нему пришел. Кто-то использует TDD, кто-то нет, но количество и качество тестов не должно зависеть от этого.

TDD в некоторых случаях ускоряет написание prod кода. Кто-то им не пользуется и возможно в некоторых ситуациях пишет prod код медленней, соответственно это минус один бонус. Но остальные бонусы тестов (как модульных, так и других) остаются актуальными.


Так он и не зависит.
Просто unit-tests без TDD - это одна сплошная головная боль.
Как бы только от этого не много.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40074717
gmugar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
да, не все что он пропагандирует бесспорно, но, в целом, он говорит правильные вещи
...
Рейтинг: 0 / 0
Тестирование private методов
    #40074739
gmugarновый публичный метод(e.g. getResults()), который возвращает результаты в виде какой-то удобной (и unmodifiable) структуры,Ну вот ты открыл метод который до этого был private или package private (если мы его таки открывали для тестирования). Что здесь принципиально поменялось? Т.е. если этот метод лежал в старом классе, то тебе не нравилось его открывать только для тестирования. А если его перенести в другой класс и сделать public, то так открывать код чисто для тестирования - правильно. Почему?
gmugarон не раскрывает никаких кишок класса; по сути, это те же данные, которые клиенты уже получают посредством toCsv(), просто в другом форматеПлохо тут то что у нас +1 публичная сущность. До этого я видел с какими классами в пакете мне нужно было взаимодействовать, а теперь оказывается есть public классы которые на самом деле мне не нужны. Но эта проблема решается - твой новый класс можно сам по себе сделать package private, т.е. он не будет виден из-вне пакета. Но опять же - в чем разница метод открывать или класс?
gmugarRobert Martin написал несколько хороших книжек и ввел в обиход понятие Clean Code.Я не большой знаток Дяди Боба, все что я о нем знаю:
1. Он написал книгу на простую тему: Clean Code. Ее в общем-то много кто мог написать. Хотя это все равно полезная работа. Если бы он только по-аккуратней писал про комментирование кода.. а то многие ленивые жопы теперь не заставить документацию писать.
2. Он создал Fitnesse - самый ужасный из известных мне фреймворков для тестирования.

Наверняка он еще что-то сделал, о чем я не знаю.. Но тем не менее, полагаться на авторитет неправильно - каждую идею нужно понимать и рассказывать от себя . А не просто ссылаться на великие умы.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40074862
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul


Так он и не зависит.
Просто unit-tests без TDD - это одна сплошная головная боль.
Как бы только от этого не много.


юнит тесты это хорошая и правильная штука,а TDD для тех ,кто какает в себя
...
Рейтинг: 0 / 0
Тестирование private методов
    #40074931
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
mad_nazgul


Так он и не зависит.
Просто unit-tests без TDD - это одна сплошная головная боль.
Как бы только от этого не много.


юнит тесты это хорошая и правильная штука,а TDD для тех ,кто какает в себя


Автоматические тесты это хорошая и правильная штука.
unit-test это инструмент для разработчика.
Им можно пользоваться, можно не пользоваться.
unit-test без TDD это головная боль, что показал ТС. :-)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40074959
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Техника TDD не везде подходит. Если у вас - прототип или какой-то быстро развивающийся стартап
то TDD никто не пишет просто по причине отсуствия контрактов. Их - некому описать. Поэтому
иногда лошадь бежит впереди телеги и иногда телега бежит впереди.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075126
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Техника TDD не везде подходит. Если у вас - прототип или какой-то быстро развивающийся стартап
то TDD никто не пишет просто по причине отсуствия контрактов. Их - некому описать. Поэтому
иногда лошадь бежит впереди телеги и иногда телега бежит впереди.


Все равно когда пишешь код, какой-то контракт появляется, так что стартап это не помеха использованию TDD.
TDD как раз позволят итеративно создавать и уточнять контракт.
Просто техника TDD настолько не привычная, что для использования нужно ломать свои навыки разработки об колено.
При этом преимуществ для того кто пишет не так уж и много.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075129
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Просто unit-tests без TDD - это одна сплошная головная боль.


если сходить в армию, то там довольно быстро объяснят кое-какие "постулаты":
- нужно знать устав
- соблюдать субординацию
- все должно быть параллельно или перпендикулярно

TTD - это из той же оперы: лысый черт собрал себе армию поклонников и эти поклонники носятся с TTD как дураки с писаной торбой, хотя на качество кода TTD вообще никак не влияет:
- если задаться вопросом получился ли в итоге хороший дизайн или нет - это выясняется только после того как API начали пользоваться третьи лица, а то что тесты под него написаны - это не суть важно, вон все API связанное к криптографией выглядит откровенно так себе (я еще какой-нить ASN.1 не упоминаю), однако его кто-таки в жаву затащил (оно же тесты проходит, ага)
- большинство проектов состоит из библиотечных вызовов чуть более чем полностью, на кой лад пытаться смотреть на метрики jacoco, если оно краевые эффекты в библиотеках не покрывает? нужно следить за тем, чтобы тесты были сами по себе разумные и затрагивали библиотеки
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075181
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul

Все равно когда пишешь код, какой-то контракт появляется, так что стартап это не помеха использованию TDD.

Сложно... сложно все это. Если говорить о контракте на "кончиках пальцев", то пишущий его не успеет
описать даже словами. Стартап - это бешеный темп продуцирования кода, 90% из которого завтра
уйдет в мусорное ведро. А пишуший - суть вольный художник который "так видит" или просто делает
POC или демо возможностей. Он слишком увлечен идеей чтобы ее формализовывать. Попробуйте ввести
в стартапы стандартные процессы - и стартап умрёт и кодеры разбегуся в разные стороны.

IMHO.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075222
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
mad_nazgul

Все равно когда пишешь код, какой-то контракт появляется, так что стартап это не помеха использованию TDD.

Сложно... сложно все это. Если говорить о контракте на "кончиках пальцев", то пишущий его не успеет
описать даже словами. Стартап - это бешеный темп продуцирования кода, 90% из которого завтра
уйдет в мусорное ведро. А пишуший - суть вольный художник который "так видит" или просто делает
POC или демо возможностей. Он слишком увлечен идеей чтобы ее формализовывать. Попробуйте ввести
в стартапы стандартные процессы - и стартап умрёт и кодеры разбегуся в разные стороны.

IMHO.

я работаю в конторе,которая очень активно развивается и мы пишем очень много кода,зачастую я начинаю какой то модуль - и еще толком никто не знает как должно быть вообще,есть некая бизнес хотелка,по которой бегло пробежались аналитики и все -я просто не представляю ,как на такое накинуть TDD

TDD наверно хорош там где у тебя все описано и задокументировано,на разраба присылают чотко описанные задачи,вплоть до типа и размера полей.Тут можно написать тест и потом к нему код,потому что изменений не будет- все описано и согласовано - а коддер тут по сути как обычный наборщик текста,поэтому без разницы что сначала писать код или тест
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075243
Андрей Панфилов
на качество кода TTD вообще никак не влияет:
- если задаться вопросом получился ли в итоге хороший дизайн или нет - это выясняется только после того как API начали пользоваться третьи лица, а то что тесты под него написаны - это не суть важно, вон все API связанное к криптографией выглядит откровенно так себе (я еще какой-нить ASN.1 не упоминаю), однако его кто-таки в жаву затащил (оно же тесты проходит, ага)
- большинство проектов состоит из библиотечных вызовов чуть более чем полностью, на кой лад пытаться смотреть на метрики jacoco, если оно краевые эффекты в библиотеках не покрывает? нужно следить за тем, чтобы тесты были сами по себе разумные и затрагивали библиотеки
Я хоть и согласен с посылом что TDD не улучшает дизайн, но аргументов этих все равно не понимаю.. Причем тут jacoco к TDD, как криптография к TDD относится.. Известно что Java реализацию писали следуя TDD? Че-т сомневаюсь. То что там тесты написаны - не говорит о том как их писали. Да и криптография - это странный пример в целом, в ней многое сделано некрасиво:
а) потому что требуется хорошая производительность
б) потому что пишут security эксперты, а не программисты которые умеют писать
И уж тем более не понимаю причем тут ASN.1.. Это просто формат, это как говорить что XSD/XML некрасивые, к TDD - никакого отношения.
maytonСтартап - это бешеный темп продуцирования кода, 90% из которого завтра
уйдет в мусорное ведро.Ну во-первых, здесь описан как раз очень медленный темп (потому как 90% в мусор), а во-вторых.. Тут многие пишут про мифические стартапы, но такое ощущение что не совсем понимают что это. Стартап - это просто проект, который получил огромное финансирование еще на этапе идеи/прототипа/ранней версии (поэтому он start up). Это не гарантирует что там какой-то страшно быстрый темп и что все пишут говнокод на коленке. Наверно большинство стартапов правда разрабатываются в быстром темпе, как собственно и обычные проекты . Часто слышу что больше 90% стартапов проваливаются - возможно от части это из-за быстрого темпа.. Может даже из-за отсутствия TDD (шучу).
asv79я работаю в конторе,которая очень активно развивается и мы пишем очень много кода,зачастую я начинаю какой то модуль - и еще толком никто не знает как должно быть вообще,есть некая бизнес хотелка,по которой бегло пробежались аналитики и все -я просто не представляю ,как на такое накинуть TDDНу это лишь значит что у вас слабые аналитика, разработка и, видимо, в целом процессы. У вас в принципе мало шансов на эффективную разработку. Это не значит что у вас ничего не получится, это лишь значит что вы медленно продвигаетесь вперед.

Основная задача TDD лишь в том, чтоб разбивать сложные задачи/алгоритмы на мелкие шаги. Сложные штуки бывают во всех отраслях и во всех типах организаций. И в "активно развивающихся", и в стабильных.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075314
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
стартап умрёт и кодеры разбегуся в разные стороны.
Так может это и к лучшему?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075341
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть и к лучшему.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075357
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Часто слышу что больше 90% стартапов проваливаются - возможно от части это из-за быстрого темпа.. Может даже из-за отсутствия TDD (шучу).

Разумеется TDD здесь не причем. Правильнее сказать что TDD не влияет на принятие решения о качестве
стартапа. Ведь стартап демонстрирует идею или концепт. И временные затраты на TDD не дают того ощутимого
результата в данном случае. А оттачиванеи качества кода - это уже 2 фаза стартапа. Когда уже бизнес заинтересован
в продолжении эксплуатации этого изделия. Здесь уже можно и баги закрыть или качество покрытия поднять.
Поэтому лошадь и телега поменялись местами.

IMHO
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075362
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отстал я от жизни. Мои познания в методологиях наверное начала не то, что 2000, а 1990-х годов.

Тогда модно было не TDD, а extrime programming. Вроде как ориентировалось как раз на скорость написание кода. Но одновременное написание теста - одна из основ и в XP.

Т.ч. тесты тестам рознь и со скоростью набивания текста связаны слабо.

AFAIK
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075464
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Отстал я от жизни. Мои познания в методологиях наверное начала не то, что 2000, а 1990-х годов.

Тогда модно было не TDD, а extrime programming. Вроде как ориентировалось как раз на скорость написание кода. Но одновременное написание теста - одна из основ и в XP.

Т.ч. тесты тестам рознь и со скоростью набивания текста связаны слабо.

AFAIK


Ну главное в XP это писать вдвоем, желательно за одним компьютером.

<:o)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075468
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jetbrains там разрабатывал какие-то новые плагины для коллективной разработки.

Кто-то пробовал?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075476
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Ну это лишь значит что у вас слабые аналитика, разработка и, видимо, в целом процессы. У вас в принципе мало шансов на эффективную разработку. Это не значит что у вас ничего не получится, это лишь значит что вы медленно продвигаетесь вперед.

Основная задача TDD лишь в том, чтоб разбивать сложные задачи/алгоритмы на мелкие шаги. Сложные штуки бывают во всех отраслях и во всех типах организаций. И в "активно развивающихся", и в стабильных.

Какой то спонтанный выброс эмоций)
зачем мне тдд ,чтобы декомозировать задачи на более маленькие? у вас все настолько плохо с тех.лидом ?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075490
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот когда свои структуры данных разрабатывал. Графы там. и прочее. В первую очередь писал тесты.
Это скажем так... сам бох велел.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075518
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я вот когда свои структуры данных разрабатывал. Графы там. и прочее. В первую очередь писал тесты.
Это скажем так... сам бох велел.

Звучит так ,Как если бы ты пришел в ресторан и прежде чем выбрать что- то из меню сходил в туалет и покакал в себя)
поняв что TASTE NOT SO GOOD ты выбрал что то иное,из того что ел вчера)
Ну по факту комичная ситуация с TDD - видимо либо аналитики слабые,либо очено мало работы у разрабов- по другому сложно понять - зачем это
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075520
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
mayton
Я вот когда свои структуры данных разрабатывал. Графы там. и прочее. В первую очередь писал тесты.
Это скажем так... сам бох велел.

Звучит так ,Как если бы ты пришел в ресторан и прежде чем выбрать что- то из меню сходил в туалет и покакал в себя)
поняв что TASTE NOT SO GOOD ты выбрал что то иное,из того что ел вчера)
Ну по факту комичная ситуация с TDD - видимо либо аналитики слабые,либо очено мало работы у разрабов- по другому сложно понять - зачем это

Если вспомнить что тесты - суть документация (или спека) переписанная кодом - то все становится на места.
Кодишь по спеке - кодишь по TDD.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075522
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79
пропущено...

Звучит так ,Как если бы ты пришел в ресторан и прежде чем выбрать что- то из меню сходил в туалет и покакал в себя)
поняв что TASTE NOT SO GOOD ты выбрал что то иное,из того что ел вчера)
Ну по факту комичная ситуация с TDD - видимо либо аналитики слабые,либо очено мало работы у разрабов- по другому сложно понять - зачем это

Если вспомнить что тесты - суть документация (или спека) переписанная кодом - то все становится на места.
Кодишь по спеке - кодишь по TDD.

возникает один вопрос где взять спеку)тебе такое задатут миллионы разрабов по всему миру и твое ТДД не вытерпит ни какой критики

нет никаких спек в реальном программировании- тока у мастадонотов,да и то не всегда и не везде
да даже у мастадонтов такая там печаль что забей
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075525
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
mayton
пропущено...

Если вспомнить что тесты - суть документация (или спека) переписанная кодом - то все становится на места.
Кодишь по спеке - кодишь по TDD.

возникает один вопрос где взять спеку)тебе такое задатут миллионы разрабов по всему миру и твое ТДД не вытерпит ни какой критики

нет никаких спек в реальном программировании- тока у мастадонотов,да и то не всегда и не везде
да даже у мастадонтов такая там печаль что забей

Тест - это набор утверждений. Обычно простых. Если на вход бизнес-объекта пришло ... тра-ляля то на выходе .. труляля.
Обычно это хотя-бы 1 раз проговаривают. Хотя-бы сам для себя ты это проговариваешь. Можно говорить - функция.
И мне даже Ф. больше нравится но уж коли мы тут варимся в мире ООП то пускай будет бизнес-объект.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075526
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79
пропущено...

возникает один вопрос где взять спеку)тебе такое задатут миллионы разрабов по всему миру и твое ТДД не вытерпит ни какой критики

нет никаких спек в реальном программировании- тока у мастадонотов,да и то не всегда и не везде
да даже у мастадонтов такая там печаль что забей

Тест - это набор утверждений. Обычно простых. Если на вход бизнес-объекта пришло ... тра-ляля то на выходе .. труляля.
Обычно это хотя-бы 1 раз проговаривают. Хотя-бы сам для себя ты это проговариваешь. Можно говорить - функция.
И мне даже Ф. больше нравится но уж коли мы тут варимся в мире ООП то пускай будет бизнес-объект.

смотри если есть некая вменяемая спека -зачем тебе тест?
вот у меня две задачи
одна подходит под TDD - по кафке нам летят месаджи из них я должен собрать два объекта и связать их 1 к многим
тут да можно написать тест - но накой хер он мне?я буду тратить пару дней на это и потом еще 1 на код?)
а тесты юнит я нагенерю за пару часов
ну и вторая задача это прикрутить АБАК - никто не знает ничего что надо и что должно быть - нука прикрути сюда свой ТДД)

шляпа это все ,как правильно сказал выше памфилов- просто какой то дурак сказал и все начали повторять
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075527
asv79зачем мне тдд ,чтобы декомозировать задачи на более маленькие?Кто-то что-то говорил про декомпозицию задач?
Книгу по TDD ты видимо не читал. Когда тут тебе рассказывают что такое TDD ты тоже не особо вчитываешься. Т.е. ты влезаешь в дискуссию в которой заведомо не разбираешься и учиться не отказываешься. Осталось только понять зачем :)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075528
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

смотри если есть некая вменяемая спека -зачем тебе тест?
вот у меня две задачи
одна подходит под TDD - по кафке нам летят месаджи из них я должен собрать два объекта и связать их 1 к многим
тут да можно написать тест - но накой хер он мне?я буду тратить пару дней на это и потом еще 1 на код?)
а тесты юнит я нагенерю за пару часов
ну и вторая задача это прикрутить АБАК - никто не знает ничего что надо и что должно быть - нука прикрути сюда свой ТДД)

шляпа это все ,как правильно сказал выше памфилов- просто какой то дурак сказал и все начали повторять

Панфилов сказал что не нужно бездумно повторять. Вот ты поменяешь проект (кто знает) и придешь вникать
в новые процессы. А там окажется и команда и весь облуживающий персонал сидят на TDD просто потому что
предметная область такова. И условия подходящие. Что возмутишся? Или скажешь - я не буду делать? Хер
там. Сядешь, утрёшь слёзы и погнал кодить по TDD. Так што от тюрмы и от сумы....
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075536
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
asv79зачем мне тдд ,чтобы декомозировать задачи на более маленькие?
Кто-то что-то говорил про декомпозицию задач?
Книгу по TDD ты видимо не читал. Когда тут тебе рассказывают что такое TDD ты тоже не особо вчитываешься. Т.е. ты влезаешь в дискуссию в которой заведомо не разбираешься и учиться не отказываешься. Осталось только понять зачем :)
я прекрасно знаю что такое ваше печальное ТДД и имел опыт работы с таким подходом)
вот ты стасят вроде и норм местами,но вешаешь ярлыки не разобравшись в проблеме)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075537
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79

смотри если есть некая вменяемая спека -зачем тебе тест?
вот у меня две задачи
одна подходит под TDD - по кафке нам летят месаджи из них я должен собрать два объекта и связать их 1 к многим
тут да можно написать тест - но накой хер он мне?я буду тратить пару дней на это и потом еще 1 на код?)
а тесты юнит я нагенерю за пару часов
ну и вторая задача это прикрутить АБАК - никто не знает ничего что надо и что должно быть - нука прикрути сюда свой ТДД)

шляпа это все ,как правильно сказал выше памфилов- просто какой то дурак сказал и все начали повторять

Панфилов сказал что не нужно бездумно повторять. Вот ты поменяешь проект (кто знает) и придешь вникать
в новые процессы. А там окажется и команда и весь облуживающий персонал сидят на TDD просто потому что
предметная область такова. И условия подходящие. Что возмутишся? Или скажешь - я не буду делать? Хер
там. Сядешь, утрёшь слёзы и погнал кодить по TDD. Так што от тюрмы и от сумы....

Никода я не буду кодить по ТДД,ибо это уже не кодинг,а какая то ферма по выращиваниванию овощей
Мне нужен полет фантазии и прочие ништяки,а свое ТДД засуньте себе ЖПО и будьте здоровы)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075539
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Панфилов сказал что не нужно бездумно повторять.

панфилов сказал то что сказал и там явно не то что ты сейчас написал
По факту ТДД нужно для просто каких то конченых даунов ,которые не способны реализовать задачу иначе,чем через уже готовый тест
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075584
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79, мне нравится твой неприкрытый максимализм.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075613
gmugar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav Bashkyrtsevgmugarновый публичный метод(e.g. getResults()), который возвращает результаты в виде какой-то удобной (и unmodifiable) структуры,

Ну вот ты открыл метод который до этого был private или package private (если мы его таки открывали для тестирования). Что здесь принципиально поменялось? Т.е. если этот метод лежал в старом классе, то тебе не нравилось его открывать только для тестирования. А если его перенести в другой класс и сделать public, то так открывать код чисто для тестирования - правильно. Почему?
gmugarон не раскрывает никаких кишок класса; по сути, это те же данные, которые клиенты уже получают посредством toCsv(), просто в другом формате

Плохо тут то что у нас +1 публичная сущность. До этого я видел с какими классами в пакете мне нужно было взаимодействовать, а теперь оказывается есть public классы которые на самом деле мне не нужны. Но эта проблема решается - твой новый класс можно сам по себе сделать package private, т.е. он не будет виден из-вне пакета. Но опять же - в чем разница метод открывать или класс?

мы с вами по кругу ходим.
напомню, что изначально вопрос был в том нужно ли тестировать private методы.
речь шла о private, а не о package-private, что не одно и то же.
моя мысль в том, что если, вдруг, без тестирования через private не получается (с соблюдением концепции хорошего unit-теста, одна из важных особенностей которого - простота написание этого самого unit-теста), то надо что-то менять, а не лезть в private.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075615
gmugar
Stanislav Bashkyrtsevпропущено...

Ну вот ты открыл метод который до этого был private или package private (если мы его таки открывали для тестирования). Что здесь принципиально поменялось? Т.е. если этот метод лежал в старом классе, то тебе не нравилось его открывать только для тестирования. А если его перенести в другой класс и сделать public, то так открывать код чисто для тестирования - правильно. Почему?
пропущено...

мы с вами по кругу ходим.
напомню, что изначально вопрос был в том нужно ли тестировать private методы.
речь шла о private, а не о package-private, что не одно и то же.
моя мысль в том, что если, вдруг, без тестирования через private не получается (с соблюдением концепции хорошего unit-теста, одна из важных особенностей которого - простота написание этого самого unit-теста), то надо что-то менять, а не лезть в private.Ну дак то что ты предлагаешь сделать - это и есть лезть в private. Твое предложение заключается в том чтоб просто открыть приватный код, выделив его в отдельный класс. Я лишь хочу заметить что это ничем по своей сути не отличается от того чтоб сделать приватный метод package private оставив его в изначальном классе. В обоих случаях мы открываем private код.

А правильный "не лезть в private" заключается в том чтоб оставить prod код в покое и тестировать все через настоящий public API (а не сконструированный только потому что тестам надо было). Со всеми вытекающими плюсами и минусами.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075622
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы скоро дойдем до Java9 модулей. Мне кажется спор - схоластика вокруг ООП. Что считать приватным и полу-приватным.

Ведь это же не важно. А важно чтобы бизнес-кейс прошел на 100% в зеленый сегмент тестирования.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075624
gmugar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav BashkyrtsevА правильный "не лезть в private" заключается в том чтоб оставить prod код в покое и тестировать все через настоящий public API (а не сконструированный только потому что тестам надо было). Со всеми вытекающими плюсами и минусами.

с этим, собственно, никто и не спорит.
вообще тестировать нужно только, этот самый, "настоящий public API".

но вот c "логику очень часть неудобно покрывать через public интерфейс."(это ваши слова), я не согласен в корне.
мой опыт, однозначно, не совпадает с этой точкой зрения.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075630
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ (прогеры) уверяет в веб, что при тестах скорость снижается только первые два года их написания.
Зато потоооооом))
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075647
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Ну дак то что ты предлагаешь сделать - это и есть лезть в private. Твое предложение заключается в том чтоб просто открыть приватный код, выделив его в отдельный класс. Я лишь хочу заметить что это ничем по своей сути не отличается от того чтоб сделать приватный метод package private оставив его в изначальном классе. В обоих случаях мы открываем private код.

А правильный "не лезть в private" заключается в том чтоб оставить prod код в покое и тестировать все через настоящий public API (а не сконструированный только потому что тестам надо было). Со всеми вытекающими плюсами и минусами.


Не совсем. Если нужно протестировать private метод, это значит, что этот метод не может быть private.
И скорее всего там где-то нарушен принцип "single responsibility principle".
Так что вынести логику в отдельный класс это скорее всего правильное решение.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075676
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".Наша песня хороша - начинай сначала :)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075691
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Просто люди так много слышат что тесты якобы улучшают дизайн

Вообще практическая польза тестов стремится к нулю
по факту они ипользуются лишь при сборке и потом приложение попадает на тестовые стенды ,где даже если бы тестов не было - все это вылезет 100500 тысяч миллионов раз и без всяких юнит тестов
Тоесть просто выкидываем деньги на ветер- тратя время разрабов на создание и что не мало важно поддержку этой юзлесс истории
Стандартная ситуация - написаны тесты,поступила задача поменять какой то класс ,который учавствовал в тесте- фигах тесты падают- хотя фактически все норм,просто тест уже неактуален и вот ты идешь ее актуализировать
Получается порочный круг ,вместо какой то видимой помощи,тесты наоборот замедляют работу разработчиков

Вот что по сути нужно,это коменнты на коде - ты тут нагадил - а потом после тебя люди приходят и гадают ,а что это такое и что он хотел- доходит до такого ,что никто не в состоянии понять для чего вот это поле в классе и какой в нем смысл)

Я не против тестов ,как таковых - но какой то продуктивной пользы в них не вижу от слова совсем и есть конторы где с тестами носятся как с писаной торбой,а есть где этих тестов нет и все прекрасно работает и развивается в своем ключе без них
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075698
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79, тыж в банке верно? Значит в разработке есть своя цена ошибки.

Это как страховка. Ты платишь по чуть-чуть чтобы для прод-релиза иметь больше гарантий что ты ничего
не сломал внося изменения.

То что ты говоришь про тестовые стенды - это другая часть работы. Это наверное отвественность QA.
Но QA не тестирует нефункциональное минорное и техническое. Всякие там NPE и прочее. Они конешно
могут это найти случайно. Но репутация сектора разработки тоже страдает. Выж не должны выкатывать
забагованный по самую крышу рализ-кандидат. Надо как-то проявить аккуратность. Репутационный вопрос
вобщемто.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075703
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

Вот что по сути нужно,это коменнты на коде - ты тут нагадил - а потом после тебя люди приходят и гадают ,а что это такое и что он хотел- доходит до такого ,что никто не в состоянии понять для чего вот это поле в классе и какой в нем смысл)

По поводу каментов в коде. Мой опыт показывает что их не актуализируют. Тоесть грубо говоря ты написал
тонну текста. Потом зашел другой разраб. Код поменял а камент проигнорил. Далее - ситуация усугубляется.
Есть код и есть текст которые друг другу противоречат. И если контроль над кодом идет через тестирование
то контроля над каментами нет вообще никакого. Дай бох его прочитают во время код-ревью и дадут по шапке.

Но я готов спорить на виски (и выигрывать) что нечитают и не актуализируют.

Или нужно иметь на проекте отдельного человека (теч-райтера) который будет буквально отвечать за документацию
в Doxia, JavaDoc, Confluence e.t.c.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075734
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79, тыж в банке верно? Значит в разработке есть своя цена ошибки.

Это как страховка. Ты платишь по чуть-чуть чтобы для прод-релиза иметь больше гарантий что ты ничего
не сломал внося изменения.

То что ты говоришь про тестовые стенды - это другая часть работы. Это наверное отвественность QA.
Но QA не тестирует нефункциональное минорное и техническое. Всякие там NPE и прочее. Они конешно
могут это найти случайно. Но репутация сектора разработки тоже страдает. Выж не должны выкатывать
забагованный по самую крышу рализ-кандидат. Надо как-то проявить аккуратность. Репутационный вопрос
вобщемто.

в банке - и вот честно скажу за 2 года работы я ни разу не видел такого момента,чтобы эти тесты что то там отловили,кроме того,что при любых изменениях приходится еще и тесты актуализировать - по факту двойная работа.
Я могу тебе сказать как произсходит приемка релиза,сначала все это тестируют QА,потом это выкатывается все на препрод ,где уже проходит ПСИ ,далее прод с двух недельным гарантийным обязательством- далее этот релиз уходит из нашей зоны ответственности
тоесть понятно что баги могут вылезти и они вылазят вне зависимости от тестов

по факту при сборке в ста случаях из ста за мою практику когда падает тест- ты идешь и правишь тест)вот и вся цена этим тестам
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075738
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странная практика, странная статистика

Юнит тесты они еще и как регрессивные тесты работают. Если при серьезном модификации кода, тесты ни разу ни одной ошибки не нашли то:
1. или программисты святые и ошибок не допускают
2. или серьезной модификации кода не делали
3. или тесты - .....

IMHO
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075739
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79

Вот что по сути нужно,это коменнты на коде - ты тут нагадил - а потом после тебя люди приходят и гадают ,а что это такое и что он хотел- доходит до такого ,что никто не в состоянии понять для чего вот это поле в классе и какой в нем смысл)

По поводу каментов в коде. Мой опыт показывает что их не актуализируют. Тоесть грубо говоря ты написал
тонну текста. Потом зашел другой разраб. Код поменял а камент проигнорил. Далее - ситуация усугубляется.
Есть код и есть текст которые друг другу противоречат. И если контроль над кодом идет через тестирование
то контроля над каментами нет вообще никакого. Дай бох его прочитают во время код-ревью и дадут по шапке.

Но я готов спорить на виски (и выигрывать) что нечитают и не актуализируют.

Или нужно иметь на проекте отдельного человека (теч-райтера) который будет буквально отвечать за документацию
в Doxia, JavaDoc, Confluence e.t.c.

да к сожалению это так и есть.
Не тесты конечно есть и полезные- например те,которые чекают время запроса,выполенния метода,записи там в бд и тд
где по SLA мы видим вкатываемся мы в нормы
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075740
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

в банке - и вот честно скажу за 2 года работы я ни разу не видел такого момента,чтобы эти тесты что то там отловили,кроме того,что при любых изменениях приходится еще и тесты актуализировать - по факту двойная работа.
Я могу тебе сказать как произсходит приемка релиза,сначала все это тестируют QА,потом это выкатывается все на препрод ,где уже проходит ПСИ ,далее прод с двух недельным гарантийным обязательством- далее этот релиз уходит из нашей зоны ответственности
тоесть понятно что баги могут вылезти и они вылазят вне зависимости от тестов

по факту при сборке в ста случаях из ста за мою практику когда падает тест- ты идешь и правишь тест)вот и вся цена этим тестам

Посмотри Code-coverage. Sonar показывает или Jacoco плагин.

Возможно у тебя нужный и полезный код просто не покрыт.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075742
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

Не тесты конечно есть и полезные- например те,которые чекают время запроса,выполенния метода,записи там в бд и тд
где по SLA мы видим вкатываемся мы в нормы

SLA/Performance - это немножко другое. Это не про correctness а это фактически проверка того что изменения
не просадили перформанс. И эти тесты не закрепляют бизнес-логику. Обычно такая задача перед ними
не стоит. Они утверждают например что скорость канала месседжей например не меньше чем 100 штук в секунду.
Понятное дело что такие тесты не будут ловить логические баги. А они скорее закрепляют собой инфра-структурные
метрики. Сеть там... сервисы.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075756
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79

в банке - и вот честно скажу за 2 года работы я ни разу не видел такого момента,чтобы эти тесты что то там отловили,кроме того,что при любых изменениях приходится еще и тесты актуализировать - по факту двойная работа.
Я могу тебе сказать как произсходит приемка релиза,сначала все это тестируют QА,потом это выкатывается все на препрод ,где уже проходит ПСИ ,далее прод с двух недельным гарантийным обязательством- далее этот релиз уходит из нашей зоны ответственности
тоесть понятно что баги могут вылезти и они вылазят вне зависимости от тестов

по факту при сборке в ста случаях из ста за мою практику когда падает тест- ты идешь и правишь тест)вот и вся цена этим тестам

Посмотри Code-coverage. Sonar показывает или Jacoco плагин.

Возможно у тебя нужный и полезный код просто не покрыт.

у нас покрыто все - сам понимаешь зона отвественности- хотя как я уже говорил - толку просто ноль
а вот slшки - как раз очень часто помогают,так как сам понимаешь на хайлоад системах очень важны такие моменты
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075759
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
mayton
пропущено...

Посмотри Code-coverage. Sonar показывает или Jacoco плагин.

Возможно у тебя нужный и полезный код просто не покрыт.

у нас покрыто все - сам понимаешь зона отвественности- хотя как я уже говорил - толку просто ноль
а вот slшки - как раз очень часто помогают,так как сам понимаешь на хайлоад системах очень важны такие моменты

Ты выше пишешь про "двойную работу". Тесты должны писаться так чтобы их поддержка не занимала столько-же
времени сколько и написание основного кода. Если у вас тесты настолько сложны и трудозатратны - то проанализируйте
ГДЕ сложно и просто выкиньте это из покрытия. Перепишите проще. Выкиньте @SpringBoorTest. Напишите обычные
без фреймворка. Если бизнес функция не позволяет - выделите функцию в чистый (pure) java class. Обычно
мне это всегда удавалось. И жить будет проще.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075802
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Ты выше пишешь про "двойную работу". Тесты должны писаться так чтобы их поддержка не занимала столько-же
времени сколько и написание основного кода. Если у вас тесты настолько сложны и трудозатратны - то проанализируйте
ГДЕ сложно и просто выкиньте это из покрытия. Перепишите проще. Выкиньте @SpringBoorTest. Напишите обычные
без фреймворка. Если бизнес функция не позволяет - выделите функцию в чистый (pure) java class. Обычно
мне это всегда удавалось. И жить будет проще.[/quot]
любая поддержка это уже поддержка,будь то самые простые юнит тесты или интеграционные - их нужно постоянно актуализировать
когда много кода,тестов тоже много,зачастую при даже не самом большом рефакторинге приходится делать сопоставимый объем работы и в тестах-это супер накладно ,нулевое бизнес велью ,около нулевое девелопер велью
ну может ток тестировшики тебе спасибо скажут ,что один раз в тысячу лет ты что то там тестами этими не пропустил)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075803
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Странная практика, странная статистика

Юнит тесты они еще и как регрессивные тесты работают. Если при серьезном модификации кода, тесты ни разу ни одной ошибки не нашли то:
1. или программисты святые и ошибок не допускают
2. или серьезной модификации кода не делали
3. или тесты - .....

IMHO

при серьезной модификации кода тесты ломаются и это очевидно что их приходится актуализировать- что может там поймать поломанный тест?
программисты не святые,но есть жеское код ревью - я знаю ,что во многих конторах на эту часть разработки почему то кладут болт,а потом у них тесты краснеют - что не удивительно)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40075824
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79, слышал про PBT?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076286
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Ты выше пишешь про "двойную работу". Тесты должны писаться так чтобы их поддержка не занимала столько-же
времени сколько и написание основного кода. Если у вас тесты настолько сложны и трудозатратны - то проанализируйте
ГДЕ сложно и просто выкиньте это из покрытия. Перепишите проще. Выкиньте @SpringBoorTest. Напишите обычные
без фреймворка. Если бизнес функция не позволяет - выделите функцию в чистый (pure) java class. Обычно
мне это всегда удавалось. И жить будет проще.


Ну ты сказал!
Может ещё "Чистый код" посоветуешь почитать?!
Какое еще single responsibility!
Тут таску надо закрывать, а не тесты писать!

<:o)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076304
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При чем тут чистый код? Чувак неделю пишет user story. Потом еще неделю - тесты по ней.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076330
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
При чем тут чистый код? Чувак неделю пишет user story. Потом еще неделю - тесты по ней.


При том, что тестируемость, ходит где-то рядом с чистым кодом и принципом single responsibility :-)
Когда принцип single responsibility нарушается, то сразу возникает вопрос как тестировать private-методы :-)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076365
mad_nazgul
Когда принцип single responsibility нарушается, то сразу возникает вопрос как тестировать private-методы :-)
Ты все повторяешь эти мантры, но на свой простенький пример я так и не получил никакого внятного предложения. Чтоб без доступа к private методам, да еще и удобно.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076436
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
mayton
При чем тут чистый код? Чувак неделю пишет user story. Потом еще неделю - тесты по ней.


При том, что тестируемость, ходит где-то рядом с чистым кодом и принципом single responsibility :-)
Когда принцип single responsibility нарушается, то сразу возникает вопрос как тестировать private-методы :-)


Я к похожему умозаключению пришел, один из заказчиков потребовал 100 процентное покрытие. Если закрыть тяжело все кейсы приватного метода закрыть через публичный то значит скорее всего приватный метод не должен быть приватным, и нужно выносить в отдельный класс ибо слишком много он делает.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076461
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

...
при серьезной модификации кода тесты ломаются и это очевидно что их приходится актуализировать- что может там поймать поломанный тест?

1. модификация бывает не только с изменением функциональности. Например:
1.1. перформанс
1.2. рефакторинг
1.3. переход на новые библиотеки/принципы взаимодействия (например я мигрировал большой проект с tcp/ip socket на nio)
и так далее и так далее
2. даже если и новые добавочные требования к функциональности, то обычно они НЕполностью заменяют старые, а лишь в какой-то части. И самое сложное, убедится, что "мелкое" исправление не поломало старый функционал
и так далее и так далее

И так вроде очевидно, для чего нужно regression test'ы. Нормые unit test'ы, обычно regression вполне заменяют и проблемы реально находят и помогают их решать.

AFAIK.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076476
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некоторые - вкладываются в страховку. Некоторые - нет. Скорее от проекта зависит. Я видел некоторые UI
проекты в которых вообще ни одного авто-теста нет. Там - полностью полагаются на мануальное тестирование.
Поэтому тестировать или нет - это договорённость в команде. Самому продакт-овнеру вобщем-то все равно
пишем мы тесты или нет.

А так - по топику вообще-то ответ всем очевиден.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076596
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
некоторые UI
проекты в которых вообще ни одного авто-теста нет. Там - полностью полагаются на мануальное тестирование
Ровно так и делали свои web проекты, т.к. там был REST и почти все изменения - это исправление sql и js, как бы... тестировать нечего
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076659
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
am_sasa
mayton
некоторые UI
проекты в которых вообще ни одного авто-теста нет. Там - полностью полагаются на мануальное тестирование
Ровно так и делали свои web проекты, т.к. там был REST и почти все изменения - это исправление sql и js, как бы... тестировать нечего


Вот js - нужно постоянно тестировать. :-)

А SQL просто сложно тестировать, т.к. инструменты для тестирования около нуля.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076667
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку SQL является декларативным языком то он изначально декларирует свой результат.
Хотя я согласен что текст SQL может быть длинными и содержащим вложенные SQL и функции.
Но есть качественная разница между SQL и императивным языком. Это примерно как разница
между maven и gradle.

Кроме того инструмент тестирования должен быть проще объекта тестирования. Иначе возникает
другой парадокс о правильности самого инструмента и его statement. Или надо писать тест на тест.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076672
mayton
Поскольку SQL является декларативным языком то он изначально декларирует свой результат.
Хотя я согласен что текст SQL может быть длинными и содержащим вложенные SQL и функции.
Но есть качественная разница между SQL и императивным языком. Это примерно как разница
между maven и gradle.
Какая разница декларативен он или нет? Я в SQL много багов встречаю как минимум потому что мы не все про данные знаем/помним, какие-то моменты забываются и опа - миграция свалилась. Или того хуже - прошла, но неверно. Плюс бывает не по той ветке join'ов пошли и собрали не те данные.
maytonКроме того инструмент тестирования должен быть проще объекта тестирования. Иначе возникает
другой парадокс о правильности самого инструмента и его statement. Или надо писать тест на тест.Не знаю откуда такие требования взялись. Как инструмент для тестирования, так и сами тесты могут быть значительно сложней основного кода. И сил нужно будет потратить на тестирование намного больше чем на написание прод кода.

Все зависит от того сколько гарантий мы хотим получить, насколько важно чтоб код работал верно. Если мы пишем какое-то второстепенное ПО для банка - народ переживет даже если оно совсем работать не будет. А если это софт для управления самолетами, ракетами, АЭС - то тут же совсем другой разговор. Тут и PBT, и MBT, и чего только не прийдется использовать. И конечно же сами инструменты для тестирования должны быть протестированы.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076674
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Какая разница декларативен он или нет? Я в SQL много багов встречаю как минимум потому что мы не все про данные знаем/помним, какие-то моменты забываются и опа - миграция свалилась. Или того хуже - прошла, но неверно. Плюс бывает не по той ветке join'ов пошли и собрали не те данные.

А можно пример такого бага? И мне также интересно как вы подготавливаете данные для подобного тестирования?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076676
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev

Не знаю откуда такие требования взялись. Как инструмент для тестирования, так и сами тесты
могут быть значительно сложней основного кода. И сил нужно будет потратить на тестирование
намного больше чем на написание прод кода.

Хотел бы я на это посмотреть.

Если вы доказываете теорему Пифагора - вы можете привлекать рассуждения более простого порядка чем
сама теорема. Можете брать аксиомы.

Но вы не можете доказать теорему Пифагора через Теорему Косинусов. Это абсурд. Никто не примет такое
доказательство.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076687
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 структуру данных. И вот тут попробуй еще написать тесты которые бы выявили многопоточные проблемы..
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076710
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
mayton
пропущено...

А можно пример такого бага?
Ну из своего проекта я конечно приводить примеров не буду, ну вот что-то подобное, синтезированное:
1. Решили для упрощения бизнес логики явно писать в БД имеет ли пользователь доступ к объекту или нет (вместо того чтоб вычислять на лету). Написали миграцию, которая проставляет флаг=true если пользователю >18. Но оказалось, что есть исключение - страна, в которой доступ можно разрешать только с 16. И админам (у которых возраст может быть не указан) тоже разрешать.
2. Добавляем новую колонку, знаем что она not null. Сразу же проставили constraint (а след строкой заполняем данными), хотя в таблице есть строки.
3. ... и т.д.

Задачи миграции. Апгрейда версий. Или просто одноразовые скрипты - это штучный товар. Они делаются 1 раз в жизни
и исполняются один раз. И тестирование для них нужно особое. Я-б даже сказал это не периодическое тестирование
а эксклюзивное. Можно договариваться заранее с админами БД Oracle например о подготовке flashback сразу после
неудачной миграции. Вобщем все это напоминает полёт на луну. Неформализовываемое. И бесконечно сложное
по комплексности.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076716
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Мы редко пишем на это тесты. Но если пишем - ну заполняем данными, затем запускаем миграцию, затем проверяем результат. Это больше для background миграций, которые идут длительное время. Для таких приложение должно поддерживать и старые, и новые данные.

А так.. как правило у нас есть дамп с прода - на нем куа тестируют вручную. Проходятся по своей тестовой документации, вспоминают что могли упустить, анализируют результат.

Вот это самое интересное. Обычный разработчик софта оперирует кодом. Данные для него либо - синтетические.
Которые он создает сам. В этом случае он должен фактически выполнить работу по наполнению БД насколько
чтобы покрыть максимум краевых кейсов своего запроса. Насколько сложна эта работа? Я думаю - соизмерима
с разработкой основной user-story.

Либо данные - продуктовые. Дамп с прода - тоже интересная задача. Во многих организациях ИБ
его просто не позволит сделать. Прод - слишком ценен. Для этого придумывают невообразимые
трансформации данных (отбеливание) с целью убить любую sensitive инфу и обезличить данные кастомера.
Это эпика. Мдя. Тут можно отдельный программный продукт создавать. Отбеливатель. Со своими настройками.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076792
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Поскольку SQL является декларативным языком то он изначально декларирует свой результат.
Хотя я согласен что текст SQL может быть длинными и содержащим вложенные SQL и функции.
Но есть качественная разница между SQL и императивным языком. Это примерно как разница
между maven и gradle.


"Бойся своих желаний они могут исполнится" :-)
Так же и с SQL.
Ты получаешь то что запрашиваешь.
Но может оказаться, что запрос не правильный.
И возвращает не то что нужно.
Хотя страшнее когда он возвращает не только то что нужно и/или не всё что только нужно. :-)

mayton

Кроме того инструмент тестирования должен быть проще объекта тестирования. Иначе возникает
другой парадокс о правильности самого инструмента и его statement. Или надо писать тест на тест.


Вот поэтому и "двигают в народ" unit-test.
Т.к. проще написать такой тест, проще протестировать.
Да и инструментарий очень простой.

Другое дело интеграционные тесты.
Там как раз вылазит NP-полная задача (с комбинаторным взрывом) тестирования всех веток БЛ.
Поэтому интеграционные тесты не могут быть простыми.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076811
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev

Третий пример (еще реалистичней) - написали какую-то concurrent структуру данных. И вот тут попробуй еще написать тесты которые бы выявили многопоточные проблемы..

Это - еще сложнее. Я не знаю тестов которые доказывают что мультипоточный код не содержит к примеру дедлоков.
Была теория (кажется на базе сетей Петри) что подобные вещи доказывают делая преобразования матриц переходов
(transition matrix) для сети которая моделирует проблему. Но эта теория осталась в универах и я никогда не видел
чтобы хоть один разработчик ею пользовался. Зачастую только PROD-эксплуатация показывает что в мультипоточном
коде есть проблема.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40076819
mayton
Stanislav Bashkyrtsev

Третий пример (еще реалистичней) - написали какую-то concurrent структуру данных. И вот тут попробуй еще написать тесты которые бы выявили многопоточные проблемы..

Это - еще сложнее. Я не знаю тестов которые доказывают что мультипоточный код не содержит к примеру дедлоков.
Была теория (кажется на базе сетей Петри) что подобные вещи доказывают делая преобразования матриц переходов
(transition matrix) для сети которая моделирует проблему. Но эта теория осталась в универах и я никогда не видел
чтобы хоть один разработчик ею пользовался. Зачастую только PROD-эксплуатация показывает что в мультипоточном
коде есть проблема.
Ну сети петри не обязательны, но в целом да - эта проблема решается с помощью Model Based Testing. Сам я многопоточность никогда не тестировал (да и толком не писал, что уж там), но периодически слышу что такой подход применяют на практике.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077251
gmugar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а знаете ли вы, что концепции 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 :
YouTube Video
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077277
gmugar1. это очень дорого: хорошие unit-test-ы и хорошее покрытие = +50% к бюджету проекта как минимумЯ пока не встречал проектов в которых модульные тесты замедляли их.. Они оттягивают перевод конкретной задачи в тестирование, но не сроки сдачи самого проекта. Я правда возможно по-другому пониманию "хорошим покрытием".
gmugarдалёкий от IT бизнес, по сей день, не понимает зачем это надо (сталкиваюсь постоянно)Никогда этого не понимал.. Откуда бизнес вообще узнает про тесты. Это подноготная программиста, о них никому говорить явно не надо.
gmugarоно и понятно: в контексте Agile unit-test-ы гораздо более ценны, потому что предполагается постоянный рефакторинг, а рефакторинг это как раз тот случай где unit-test-ы реально полезны.Рефакторинг есть везде, не только в Agile. И сломать только что работающий функционал тоже можно везде. Не знаю почему бы модульные тесты были как-то связаны с Agile..
gmugarнесмотря на то, что лично я большой поклонник unit-test-ов, я признаю, что они нужны и оправданы очень не всегда(в особенности с 100% coverage)
Про 100% покрытие не спорю (речь же про line/branch coverage?). Но интересно когда модульные тесты будут не оправданы? Ну, кроме каких-то прототипов. Я на своей памяти не могу припомнить такой ситуации..
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077290
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gmugar

1. это очень дорого: хорошие unit-test-ы и хорошее покрытие = +50% к бюджету проекта как минимум

Никто не ставит таких задач. Ни на одном проекте нам (к примеру) не заказывали процентовку покрытия. Это глупо.
Код - не одинаковый. Есть 20% особо важного кода, который представляет собой костяк логики. Его и надо
покрыть обязательно. Можное не 20. Можно 15 или 25 не суть важно. Главное что меньшая часть кода обладает
большим влиянием на качество продукта. Как по Паретто. А оставшиеся 80% это различного рода интеграции,
конфигурации, DSL языки и формальные процедуры оставшиеся от фреймворков. Их покрывать не нужно. Покрытие
особо ничего не даст а лишь усложнит поддержку тестов при эволюции.

Еще к пользе тестов я-бы добавил что они являют самую актуальную (!) документацию по использованию.
Реально! Актуальнее некуда. Никакой JavaDoc и Confluence не сравнится в точности. Читаем как книгу
тесты (сверху вниз) и озвучиваем что на наших глазах происходит. Если применять Scala или JBehave(Java) или
Spock(Groovy) то некоторые стейтменты можно писать на таком DSL что будет выглядеть как английски текст.
Бизнес-аналитики такое любят. Наглядно. И реально работает.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077364
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
mayton
Поскольку SQL является декларативным языком то он изначально декларирует свой результат.
Хотя я согласен что текст SQL может быть длинными и содержащим вложенные SQL и функции.
Но есть качественная разница между SQL и императивным языком. Это примерно как разница
между maven и gradle.


"Бойся своих желаний они могут исполнится" :-)
Так же и с SQL.
Ты получаешь то что запрашиваешь.
Но может оказаться, что запрос не правильный.
И возвращает не то что нужно.
Хотя страшнее когда он возвращает не только то что нужно и/или не всё что только нужно. :-)

mayton

Кроме того инструмент тестирования должен быть проще объекта тестирования. Иначе возникает
другой парадокс о правильности самого инструмента и его statement. Или надо писать тест на тест.


Вот поэтому и "двигают в народ" unit-test.
Т.к. проще написать такой тест, проще протестировать.
Да и инструментарий очень простой.

Другое дело интеграционные тесты.
Там как раз вылазит NP-полная задача (с комбинаторным взрывом) тестирования всех веток БЛ.
Поэтому интеграционные тесты не могут быть простыми.

интеграционные тесты как по мне полная куйня- какая та ситнтетика ,обвешаная моками
лучшие тесты как я уже выяснил это адекватно настроеный пайплайн ,наличие тест стенда и пары хороших макак на должности QA ,умеющих тыкать в постман
а все вот это джава тестирование ну оно вроде бы кто то сказал что нужно - а зачем уже давно забыли,как по мне просто юзлес хрень- у нас весь код в тестах ,coverage 90% и в реальности - разрабы только тратят время на актуализацию,а тестировщики потом находят все баги
поэтому как только я где то стану лидом) я тут же выпилю все тесты ,разгружу разрабов от поддержки и написания этой куйни ,а на высвободившиеся деньги найму пару QA макак их пту)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077365
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton


Еще к пользе тестов я-бы добавил что они являют самую актуальную (!) документацию по использованию.
Реально! Актуальнее некуда. Никакой JavaDoc и Confluence не сравнится в точности. Читаем как книгу
тесты (сверху вниз) и озвучиваем что на наших глазах происходит..

Полнейшая хрень- никогда по тестам ты реально не поймешь что в коде происходит,ибо как ты выше заметил тесты обычно покрывают 20-30%
Давно уже надо признать ,что тесты это ярмо- которое тянет на себе разраб,а вот зачем - большой вопрос
Мой ответ - ну типо так принято,мы так привыкли,а вдруг на проде что то вылезет))ну какие то вообще не состоятельные пруфы,а бизнес за это платит
Ни какие тесты никогда не исключат багов в вашем апе,по большому счету поддержка и написание этих тестов выливается в очень большие суммы с нулевым бизнес велью к сожалению
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077366
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,

вот с 2 последними постами- на 100500% согласен.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077368
asv79поэтому как только я где то стану лидом)Я надеюсь что это случится не раньше чем лет через 10 (хотя в наше время в общем-то и младших разработчиков назначают от безысходности). А к тому времени, если повезет, еще многое в голове поменяется.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077369
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,

сам автор кода и не подозревает, сколько может быть вариантов не учтённых им комбинаций, которые может ввести хороший юзер....
да и тестирование какого-то куска кода не гарантирует, что прошедший тесты код, в системе будет работать нормально.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077370
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
asv79,

вот с 2 последними постами- на 100500% согласен.

это моя боль и борьба с лидом - который упорно не понимает,что тратит ресурсы разрабов вникуда требуя покрытия и актуализации
по факту что сейчас мы имеем - какой то распухший пак с тестами,в который никто никогда не ходит,но при любом изменении там что то краснеет и ты идешь туда и начинаешь под свой код подкручивать эти тесты - вопрос ну и нах они нужны?
Я как выше говорил воспринимаю нормально только SLA тесты,где видна хоть какая то польза - типо да не проходим по откклику и тд
а когда я на входе подал 3+3 и ожидаю 6 ,причем эта 6ка где то замокана в мок репе ну и нахой оно?какой то непонятный секс в извращенной форме
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077373
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
asv79поэтому как только я где то стану лидом)
Я надеюсь что это случится не раньше чем лет через 10 (хотя в наше время в общем-то и младших разработчиков назначают от безысходности). А к тому времени, если повезет, еще многое в голове поменяется.
Я не хотел говорить,но это уже случилось)
Вся тест помойка скоро будет выпелена,так как я вижу что 20% уходит на актуализацию,при нулевом бизнес велью)
Чего и вам советую- включайте голову и задавайте сами себе вопросы - когда в последний раз тесты принесли вам не актуализацию очередную в виде выделенного на целый спринт разраба/20% времени команды ,а какую то реальную - ощутимую пользу
если чо я не бизнес)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077378
asv79а когда я на входе подал 3+3 и ожидаю 6 ,причем эта 6ка где то замокана в мок репеЕсли у вас в тестировании активно используются моки, то да, это проблема. Но не проблема тестирования, а именно того как вы пишете тесты (и скорей всего - прод код тоже). В том виде как описано выше тестирование и правда большого смысла не имеет.
asv79Я не хотел говорить,но это уже случилось)Соболезную.. Но в целом на сегодняшний день это частая проблема.asv79когда в последний раз тесты принесли вам не актуализацию очередную в виде выделенного на целый спринт разраба/20% времени команды ,а какую то реальную - ощутимую пользуНу в моем проекте это каждый день, но у меня очень уж сложная бизнес логика. На проектах по-проще это происходит реже, но все равно достаточно часто. Опять же - сильно зависит от их качества.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077381
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
asv79а когда я на входе подал 3+3 и ожидаю 6 ,причем эта 6ка где то замокана в мок репе
Если у вас в тестировании активно используются моки, то да, это проблема. Но не проблема тестирования, а именно того как вы пишете тесты (и скорей всего - прод код тоже). В том виде как описано выше тестирование и правда большого смысла не имеет.
asv79Я не хотел говорить,но это уже случилось)Соболезную.. Но в целом на сегодняшний день это частая проблема.asv79когда в последний раз тесты принесли вам не актуализацию очередную в виде выделенного на целый спринт разраба/20% времени команды ,а какую то реальную - ощутимую пользуНу в моем проекте это каждый день, но у меня очень уж сложная бизнес логика. На проектах по-проще это происходит реже, но все равно достаточно часто. Опять же - сильно зависит от их качества.
сложная бизнес логика это несколько маперов после кафка листенера?)
братишь у нас гораздо серьезней логика - просто поверь мне на слово- и все эти тесты себя не оправдывают- так как их поддержка стоит существенных денег- не знаю про ваш вариант,может у вас бесплатно люди работают или просто нихуа не делают ,а судя по тому,что ты на форуме 24/7 то так и есть ) то тогда да,но в любой серьезной конторе так не получится к сожалению и твои доводы становятся несущественными.Хотя я оговорюсь тесты у нас есть - но их бизнес велью стремится к абсолютному нулю,и дело тут не в написании тестов и не в логике ,а в самой системе тестов- ибо тесты тестируют уже написанное - а что новое - оно сразу ломается
отсюда простой вывод нах.. они?если сами тесты тупо подгоняются под код
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077382
asv79братишь у нас гораздо серьезней логика - просто поверь мне на словоЕсли бы я не видел твоих вопросов на этом форуме, может ты бы смог обмануть, ну или хотя бы заставить усомниться.. Но нет :) Излишняя самоуверенность будет сильно замедлять тебя в развитии (речь про годы )..
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077383
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
asv79братишь у нас гораздо серьезней логика - просто поверь мне на слово
Если бы я не видел твоих вопросов на этом форуме, может ты бы смог обмануть, ну или хотя бы заставить усомниться.. Но нет :) Излишняя самоуверенность будет сильно замедлять тебя в развитии (речь про годы )..
опять же ты кидаешь камень сам в себя,так как не способен к анализу- ведь вполне возможно,что я могу пилить свой собственный проект,который не имеет к моей текущей работе никакого отношения- тоесть твои утверждения заведомо ложны ибо ты должен их проверить,но так как ты плохой программист ,а судя по темам где ты учавствуешь- это так и есть,то тебе простительно.
Но между нами есть одно большое НО - я в теме два года и уже лид,а ты скорей всего кратно больше и до сих пор жуешь тут сопли)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077385
asv79ведь вполне возможно,что я могу пилить свой собственный проект,который не имеет к моей текущей работе никакого отношенияКакая разница, я ж не про тематику вопросов, а про уровень их сложности.
asv79я в теме два годаЭто очень заметно, я как раз про два года и думал, хех.. Именно к двум годам чаще всего появляется гонор (у тех у кого он появляется).
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077393
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,
Это как в статистике автоводителей. В первые пол года вождения учащаются аварии. Чайники начинают думать что они профи)))
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077396
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,
Без обид,вчера я немного пошутил,так что не воспримай всерьез.До лида мне еще далеко.
Ну по тестам- на данном этапе и из своего кругозора я вижу ,что они замедляют ,а толку от них нет.
Типичный тест- из кафки получаем сообщение и преобразуем его в нужные нам представления,другими словами маппер
И вот есть тест,который этот мапер покрывает.Ну вот и для чего он?Если из кафки придет не валидный меседж он не сможет дересеризоваться в объект того класса,который ты ожидаешь в листенере,если на твоей стороне поменялись представления,то у тебя падает тест и ты что идешь делать? правильно править тест,который подгоняется под новые свойства представления и все.
Тоесть ситуация когда этот тест реально покраснеет и нужно будет править не сам тест,а код- ну я таких ситуаций вообще не помню,зато на каждом дейли - ой ребята там тесты упали- актуализируйте)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077402
asv79, если интересно - заведи отдельную тему на это. Только распиши чуть подробней. А то я не понял кто генерирует сообщение и почему тест падает:
1. Если это внешняя система, то это круто что тест падает - он показывает что формат двух систем разошелся
2. Если это наши же тесты генерят, то не понятно почему они могут сгенерировать невалидное сообщение.. Или сообщение где-то захардкожено, и его забывают обновлять когда обновляется формат?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077449
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
Тоесть ситуация когда этот тест реально покраснеет и нужно будет править не сам тест,а код- ну я таких ситуаций вообще не помню,зато на каждом дейли - ой ребята там тесты упали- актуализируйте)


Во-о-от для этого тесты и пишут!

Человек не может помнить всё.
И лучше пусть упадут тесты, чем упадет прод.

При актуализации тестов, может оказаться, что нужно будет поменять не только тесты.

Кроме того тесты это ещё один источник правды, после самого кода.

Ещё раз.
unit-test это инструменты разработчика для разработки.
Никому кроме разработчика они особо не нужны.
Пользу для бизнеса они приносят только в том смысле, что на дальней дистанции, разработчику легче работать с кодом.
На короткой дистанции это не так. Нужно время для написания кода тестов.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077468
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
mayton


Еще к пользе тестов я-бы добавил что они являют самую актуальную (!) документацию по использованию.
Реально! Актуальнее некуда. Никакой JavaDoc и Confluence не сравнится в точности. Читаем как книгу
тесты (сверху вниз) и озвучиваем что на наших глазах происходит..

Полнейшая хрень- никогда по тестам ты реально не поймешь что в коде происходит,ибо как ты выше заметил тесты обычно покрывают 20-30%
Давно уже надо признать ,что тесты это ярмо- которое тянет на себе разраб,а вот зачем - большой вопрос
Мой ответ - ну типо так принято,мы так привыкли,а вдруг на проде что то вылезет))ну какие то вообще не состоятельные пруфы,а бизнес за это платит

Я не знаю как построена система взаимоотноешний у вас на проекте. Но у вас должно быть пристальное
и внимательное отношение к ошибкам на проде. Возможно ты - на зарплате и тебе безразлично,
терпит убытки владелец ПО или нет. Но очень хорошим карьерным трамплином будет - приближение
тебя самого к задачам и проблемам бизнеса. Если ты - чутко реагируешь на эти проблемы - то значит
достоин повышения. Если тебе - безразлично то твоё повышение может быть по возрасту лет или там
по внутренней аттестации я не знаю. В любом случае понимание рисков бизнеса и - страхование
от них это признак seniority.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077470
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

авторВозможно ты - на зарплате и тебе безразлично,
терпит убытки владелец ПО или нет. Но очень хорошим карьерным трамплином будет - приближение
тебя самого к задачам и проблемам бизнеса. Если ты - чутко реагируешь на эти проблемы - то значит
достоин повышения. Если тебе - безразлично то твоё повышение может быть по возрасту лет или там
по внутренней аттестации я не знаю. В любом случае понимание рисков бизнеса и - страхование
из сказанного следует один вывод - умеешь закрывать жопу - достоин повышения, и не важно во сколько это обходится бизнесу,.....тест прошел, значит жопа прикрыта
и не важно сколько денег потрачено на составление, отладку, проверку теста.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077488
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон мы всё таки обсуждаем технические подходы.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077523
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul


Во-о-от для этого тесты и пишут!

Человек не может помнить всё.
И лучше пусть упадут тесты, чем упадет прод.


как прод то упадет)- падает тест ,его актуализируют и все,другой код не подвергается изменению в 99.9 % случаев
тоесть если бы не было теста,то вообще ничего не упало бы и прекрасно работало.
Опять же все эти тесты тупая ,голимая синтетика ,ты хоть обложись этими тестами с ног до головы- реальные баги как были ,так и будут и скорей всего в конторе,где разрабов шпуняют на эти тесты - багов будет в разы больше,так как времени на разработку остается меньше.
И вообще не понятно как у вас сразу после пуша на прод чтоли идет поставка?
обычно это некий релиз- перед которым идет несколько процессов- разработка- тестирование- пси и только потом прод
тоесть после пуша и поставкой около 1.5 месяца всевозможных тестирований,смок ,регрес,нагрузочное итд и вот там как раз и отлавливается багулечка - процентов 70% ,остальное уже на реал юзерах в первые пару недель)
и никакие тесты неспособны на это - тесты на данный момент в проектах,где есть QA отдел=ну такое себе
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077524
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79
пропущено...

Полнейшая хрень- никогда по тестам ты реально не поймешь что в коде происходит,ибо как ты выше заметил тесты обычно покрывают 20-30%
Давно уже надо признать ,что тесты это ярмо- которое тянет на себе разраб,а вот зачем - большой вопрос
Мой ответ - ну типо так принято,мы так привыкли,а вдруг на проде что то вылезет))ну какие то вообще не состоятельные пруфы,а бизнес за это платит

Я не знаю как построена система взаимоотноешний у вас на проекте. Но у вас должно быть пристальное
и внимательное отношение к ошибкам на проде. Возможно ты - на зарплате и тебе безразлично,
терпит убытки владелец ПО или нет. Но очень хорошим карьерным трамплином будет - приближение
тебя самого к задачам и проблемам бизнеса. Если ты - чутко реагируешь на эти проблемы - то значит
достоин повышения. Если тебе - безразлично то твоё повышение может быть по возрасту лет или там
по внутренней аттестации я не знаю. В любом случае понимание рисков бизнеса и - страхование
от них это признак seniority.

бизнес понимает как раз суть ,ибо сами прогеры- и поэтому у нас отличный QA отдел,а вот были места - где такого отдела по сути не было,зато заставляли писать тесты на каждый чих.
Я не против тестов,пишу их ,но вижу их реальную бесполезность,особенно в рамках монолита,где я сейчас.
Да на микросервисах тесты могли реально работать- ибо было много различных интеграций и как раз таки эти тесты и отлавливали все что поменяли в одном месте,но забыли поменять в другом)

Но вот со стороны монолита это работает немного иначе - ну тоесть какой то помощи я почти за год от этих тестов не увидел,но зато ребята каждый день эти тесты правят хз зачем- я бы игнор навесил и забыл
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077563
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

как прод то упадет)- падает тест ,его актуализируют и все,другой код не подвергается изменению в 99.9 % случаев
тоесть если бы не было теста,то вообще ничего не упало бы и прекрасно работало.


Да легко. При интеграции.
Тест упал, значит изменился контракт.
(Если это unit-test)
И вместо, например, строки прилетело число.

asv79

Опять же все эти тесты тупая ,голимая синтетика ,ты хоть обложись этими тестами с ног до головы- реальные баги как были ,так и будут и скорей всего в конторе,где разрабов шпуняют на эти тесты - багов будет в разы больше,так как времени на разработку остается меньше.


unit-test это инструмент разработчика.
Unit-test пишут разработчики сами для себя.
Остальным они особо и не нужны.
Зачем они нужны разработчикам?
Чтобы не помнить всё.
Своего рода документация, причем которая актуализаируется by default.

asv79

И вообще не понятно как у вас сразу после пуша на прод чтоли идет поставка?
обычно это некий релиз- перед которым идет несколько процессов- разработка- тестирование- пси и только потом прод
тоесть после пуша и поставкой около 1.5 месяца всевозможных тестирований,смок ,регрес,нагрузочное итд и вот там как раз и отлавливается багулечка - процентов 70% ,остальное уже на реал юзерах в первые пару недель)
и никакие тесты неспособны на это - тесты на данный момент в проектах,где есть QA отдел=ну такое себе


В системе человек-машина слабое звено это человек.
Человек не может, в отличии от машины, одинаково эффективно делать одну и ту же операцию много раз подряд.
Поэтому чем выше автоматизация тестирования, тем меньше вероятность пропустить баг.

Интеграционное тестирование не может протестировать всё приложение.
По банальной причине - комбинаторный взрыв.
Т.е. либо тест будет длиться годами (пока пройдет по всем веткам ветвления)
Либо тестируем что нам кажется важным, при этом не факт что это является действительно важным.

Если вам не нравятся unit-test, то не пишите.
Этот инструмент, не для вас (ну или вы не умеете им пользоваться).
Так не надо себя мучить. Пишите как вам удобно.
Потом в 12ч ночи ждите звонка когда прод упадет.
<:o)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077564
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
asv79

как прод то упадет)- падает тест ,его актуализируют и все,другой код не подвергается изменению в 99.9 % случаев
тоесть если бы не было теста,то вообще ничего не упало бы и прекрасно работало.


Да легко. При интеграции.
Тест упал, значит изменился контракт.
(Если это unit-test)
И вместо, например, строки прилетело число.


Я конечно прошу прощения что вмешиваюсь, но что нужно сделать, чтобы "unit-test упал из-за изменения контракта" при одновременном соблюдении следующих условий:
- мы тестируем вполне себе конкретный метод, со вполне себе конкретной сигнатурой
- дизайн метода вполне себе "хороший", т.е. на вход он j.l.Object ни в каком виде не принимает, ровно как и не отдает
?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077570
gmugar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav Bashkyrtsev
gmugar1. это очень дорого: хорошие unit-test-ы и хорошее покрытие = +50% к бюджету проекта как минимум
Я пока не встречал проектов в которых модульные тесты замедляли их.. Они оттягивают перевод конкретной задачи в тестирование, но не сроки сдачи самого проекта. Я правда возможно по-другому пониманию "хорошим покрытием".
gmugarдалёкий от IT бизнес, по сей день, не понимает зачем это надо (сталкиваюсь постоянно)Никогда этого не понимал.. Откуда бизнес вообще узнает про тесты. Это подноготная программиста, о них никому говорить явно не надо.

это про одно и тоже - про деньги. у проектов, знаете-ли, бывает бюджет.
и время разработчика стоит очень дорого.
увеличение бюджета даже на 20% ради unit-test = космические суммы; попробуйте обосновать эти траты - поймут далеко не все

Stanislav Bashkyrtsev

gmugarоно и понятно: в контексте Agile unit-test-ы гораздо более ценны, потому что предполагается постоянный рефакторинг, а рефакторинг это как раз тот случай где unit-test-ы реально полезны.
Рефакторинг есть везде, не только в Agile. И сломать только что работающий функционал тоже можно везде. Не знаю почему бы модульные тесты были как-то связаны с Agile..

постоянный рефакторинг есть далеко не везде.

Stanislav Bashkyrtsev

gmugarнесмотря на то, что лично я большой поклонник unit-test-ов, я признаю, что они нужны и оправданы очень не всегда(в особенности с 100% coverage)
Про 100% покрытие не спорю (речь же про line/branch coverage?). Но интересно когда модульные тесты будут не оправданы? Ну, кроме каких-то прототипов. Я на своей памяти не могу припомнить такой ситуации..
не оправданно всегда, когда затраты на тесты и их поддержку не приносят хоть какой-то ощутимой пользы
понять где эта граница полезности не всегда легко, да

отсюда и проистекают рекомендации о том, что не надо покрывать unit-test-ами (ищите в интернетах, таких статей, больших и интересных, много "What should you not test")
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077576
gmugarэто про одно и тоже - про деньги. у проектов, знаете-ли, бывает бюджет.
и время разработчика стоит очень дорого.
увеличение бюджета даже на 20% ради unit-test = космические суммы; попробуйте обосновать эти траты - поймут далеко не всеДак откуда бизнес вообще узнает про это? Ни на одном проекте у меня бизнес сам не спрашивал "а сколько времени вы тратите на модульное тестирование". Они и знать-то не знают что такое существуют. Мы же об этом им не говорим, как не говорим и про рефакторинги и прочие технические детали. Им это не интересно. Они просто радуются результату.
gmugar
Stanislav Bashkyrtsev

пропущено...
Рефакторинг есть везде, не только в Agile. И сломать только что работающий функционал тоже можно везде. Не знаю почему бы модульные тесты были как-то связаны с Agile..
постоянный рефакторинг есть далеко не везде.Ну дак и в Agile командах он тоже есть не везде. Эти вещи просто никак не связаны.
gmugar
Stanislav Bashkyrtsev

пропущено...
Про 100% покрытие не спорю (речь же про line/branch coverage?). Но интересно когда модульные тесты будут не оправданы? Ну, кроме каких-то прототипов. Я на своей памяти не могу припомнить такой ситуации..

не оправданно всегда, когда затраты на тесты и их поддержку не приносят хоть какой-то ощутимой пользыЯ попросил конкретный пример.. Сам я таких таких ситуаций не помню. Есть вещи которые сложно тестировать (генерация PDF), на них часто забивают. Но чтоб вообще не писать тесты на проекте и это бы ускоряло разработку - такого не встречал.
Андрей Панфилов
mad_nazgul
пропущено...


Да легко. При интеграции.
Тест упал, значит изменился контракт.
(Если это unit-test)
И вместо, например, строки прилетело число.


Я конечно прошу прощения что вмешиваюсь, но что нужно сделать, чтобы "unit-test упал из-за изменения контракта" при одновременном соблюдении следующих условий:
- мы тестируем вполне себе конкретный метод, со вполне себе конкретной сигнатурой
- дизайн метода вполне себе "хороший", т.е. на вход он j.l.Object ни в каком виде не принимает, ровно как и не отдает
?
Если честно, даже в "плохом" дизайне не понимаю как модульные тесты упадут при изменении контракта.. Разве что речь про новую версию библиотеки. А если мы тестируем контракт между двумя приложениями , то это уже будут не модульные тесты..
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077607
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

бизнес понимает как раз суть ,ибо сами прогеры- и поэтому у нас отличный QA отдел,а вот были места - где такого отдела по сути не было,зато заставляли писать тесты на каждый чих.
Я не против тестов,пишу их ,но вижу их реальную бесполезность,особенно в рамках монолита,где я сейчас.
Да на микросервисах тесты могли реально работать- ибо было много различных интеграций и как раз таки эти тесты и отлавливали все что поменяли в одном месте,но забыли поменять в другом)

Но вот со стороны монолита это работает немного иначе - ну тоесть какой то помощи я почти за год от этих тестов не увидел,но зато
ребята каждый день эти тесты правят хз зачем- я бы игнор навесил и забыл

Стас дружище. Вот ты уже раз 10 повторил один и тот же стейтмент о том что видишь реальную бесполезность тестов.

Ты говорил об этом со своим техническим лидом?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077628
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Ты говорил об этом со своим техническим лидом?
говори - не говори. толк не будет.
".. врач сказал: "в морг". значит в морг...."
mayton
Пардон мы всё таки обсуждаем технические подходы.
да , этим термином можно прикрываться.
тесты сделал, - "..К пуговицам претензии есть?..", и не важно как костюмчик сидит.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077653
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79

...
Но вот со стороны монолита это работает немного иначе - ну тоесть какой то помощи я почти за год от этих тестов не увидел,но зато
ребята каждый день эти тесты правят хз зачем- я бы игнор навесил и забыл

Стас дружище. Вот ты уже раз 10 повторил один и тот же стейтмент о том что видишь реальную бесполезность тестов.

Во многих случаях (тестирование логики в БД, тестирование не модульно созданного монолита, тестирование при постоянной разработке и меняющихся требованиях и так далее) можно говорить, что тесты и их поддержание в актуальном состоянии очень дорого.

Но говорить, что они бесполезны... Х.з.... видел многие проекты где необходимых тестов не было, именно из-за их дороговизны (или кривизны рук, не смогли малыми силами сделать тесты)... но говорить о бесполезности - пытались, полезность была всем понятна, но просто не смогли сделать (((

Ручное тестирование - не является альтернативой. Для нового функционала, да, конечно. Но с точки зрения регрессион тестов - ручное тестирование просто не реально.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077656
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя

тесты сделал, - "..К пуговицам претензии есть?..", и не важно как костюмчик сидит.


IMHO & AFAIK вообще-то тесты (план тестирования) должны делать не столько программисты, сколько аналитики/консультанты. Есть ТЗ, требования - вместе с ним должен быть базовый/начальный план тестирования. По крайне мере по Oracle AIM ровно так.

Без относительно ручные/автоматические тесты.

Unit Test'ы обычно пишут сами программисты. Но если мы хотим от тестов еще и ценности для бизнеса - то нужно ориентироваться все же на план тестирования, который должен возникать НЕ при программирование, а значительно раньше.

Граница между Unit / интеграционные и так далее - IMHO для монолита не очень очевидна. Для многих типов монолитов вообще Unit тест не возможен (логика в бд, MS Acess, FoxPro и так далее)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077669
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton
Ты говорил об этом со своим техническим лидом?
говори - не говори. толк не будет.
".. врач сказал: "в морг". значит в морг...."
mayton
Пардон мы всё таки обсуждаем технические подходы.
да , этим термином можно прикрываться.
тесты сделал, - "..К пуговицам претензии есть?..", и не важно как костюмчик сидит.

Давай подойдем с другой стороны к вопросу. Не с про-активной а с реактивной.

Вот допустим сделан релиз. И был зафиксирован к примеру 5 критических багов и 3 основных и 2 минорных.
Надо проанализировать ситуацию. И понять как так случилось что 5 багов было пропущено? Если это
были кейсы которые было принпиципльно НЕВОЗМОЖНО протестировать (баг на стороне БД) или вообще
проблема сетевой инфраструктуры или кто-то завтыкал ключи и пароли обновить - то это просто будет
зафиксировано как неизбежность. Но если был шанс поймать это тестированием чистой бизнес-функции
- то после фиксации такие тесты надо написать. И обобщить этот approach на всё приложение. Посмотреть
где в подобных местах может случится следующий баг. Придавить тестами.

Вот как-то так. Итеративно. И это покрытие уже будет покрывать не инварианты где тестят что 1==1
и не пустышки про которые так ругается Стас а реально, боевой и значимый код. И вот этот
боевой код должен быть компактным. Я ванговал 20% но я готов согласится и на меньшее.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077677
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Не специалист по ISO 9000

Но вроде ISO 9000 не требует, что бы ошибок не было. Но требует (!), что бы если ошибка/проблема была выявлена, то были приняты организационные меры, что бы такая ошибка/проблема (а лучше целый класс проблем такого рода) не могла повториться в дальнейшем

Тесты и должны давать такую возможность. Если баг выявили, то должен быть тест, гарантирующий что такой баг не будет повторен.

Но это в теории. А на практике, например в Oracle СУБД, дофига багов которые были устранены в 11.4, а в 11.5 уже обратно появились один в один ((( Как так? ((( И не сказать, что Oracle маленькая контора, и не сказать, что у них бюджен на разработку СУБД (основного продукта) маленький.... а те же самые баги по несколько раз всплывают ((( и где тесты ((( и где качество (((

AFAIK
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077742
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Стас дружище. Вот ты уже раз 10 повторил один и тот же стейтмент о том что видишь реальную бесполезность тестов.

Ты говорил об этом со своим техническим лидом?

Конечно,он топил за TDD вообще,кое как удалось его убедить ,что в рамках растущего на как на дрожжах проекта - такая концепция просто непременима .Сошлись с ним на интерагционных и унит тестах и я наверно первый кто написал какое то огромное количество тестов тогда,потом его слава богу уволили и тема тестов благополучно сошла на нет.Но до сих пор я вижу ,как о те тесты постоянно спотыкаются разрабы при разработке и рефакторинге- тратится уйма времени на их актуализацию ,а это все деньги и достаточно ощутимые.
Я не умаляю роли тестов,но как выше уже говорил на монолитах наверно они просто бессмыслены.
На интеграциионных,когда вы разрабатываете несколькими командами что то микросервисное - там да они нужны с натяжкой

вот ПРимер когда тесты нужны
миросервисная архитектура
брокер сообщений - например кафка
есть некий микросервис выступающий источником правды для всех остальных сервисов- тоесть в нем лежат дтошки,которыми сервисы кидаются в друг друга

и вот когда ты обновил свой сервис и сервис с дтохами - другой сервис об этом не знает ,но как только будут запушены интеграционные тесты - упадет- тем самым и достигается польза- разраб второго сервиса пойдет акутализировать свой код!
именно код,а не тест- вот тут польза от тестов просто колосальная - так как если у вас достаточно большой зоопарк никаких тестировщиков не хватит все это потестить
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077777
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

и вот когда ты обновил свой сервис и сервис с дтохами - другой сервис об этом не знает ,но как только будут запушены интеграционные тесты - упадет- тем самым и достигается польза- разраб второго сервиса пойдет акутализировать свой код!
именно код,а не тест- вот тут польза от тестов просто колосальная - так как если у вас достаточно большой зоопарк никаких тестировщиков не хватит все это потестить

Ну это ближе к интеграционным. Ведь вам надо по сути проверить что контракт сошёлся. Дернули метод и он ответил - Http-200 OK!

Кстати при зоопарке микросервисов - полезно создавать 1 общий репо куда складывать декларации сетевых протоколов в:
- Swagger
- GraphQl
- SOAP
- e.t.c.

Как только кто-то обновился - все другие команды обязаны зайти и синхронизировать клиентов (или серверы кому как надо).
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077779
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Вот допустим сделан релиз. И был зафиксирован к примеру 5 критических багов и 3 основных и 2 минорных.
Надо проанализировать ситуацию. И понять как так случилось что 5 багов было пропущено? Если это
были кейсы которые было принпиципльно НЕВОЗМОЖНО протестировать (баг на стороне БД) или вообще
проблема сетевой инфраструктуры или кто-то завтыкал ключи и пароли обновить - то это просто будет
зафиксировано как неизбежность. Но если был шанс поймать это тестированием чистой бизнес-функции
- то после фиксации такие тесты надо написать. И обобщить этот approach на всё приложение. Посмотреть
где в подобных местах может случится следующий баг. Придавить тестами.
всё на уровне вероятности
авторНо если был шанс пойматьа где вероятность , что затраты на это тестирование окупились?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077783
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эту вероятность никто не посчитает. Сам оценишь. Если следующий релиз пройдет
без багов - значит было успешно.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077785
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Эту вероятность никто не посчитает. Сам оценишь. Если следующий релиз пройдет
без багов - значит было успешно.
опять таки "если"....
и появятся новые....
...
Рейтинг: 0 / 0
Тестирование private методов
    #40077788
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton
Эту вероятность никто не посчитает. Сам оценишь. Если следующий релиз пройдет
без багов - значит было успешно.
опять таки "если"....
и появятся новые....

А у тебя - серебрянная пуля есть? Или знаешь куда "соломки" подложить...
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079406
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НУ вот у меня сейчас есть план протестировать рест+ кафку+дб

тоесть на вход я должен скормить джейсон -отправить его на наш рест - отуда послать в топик кафки - из топика достать ,записать в бд
и проверить что я записал то,что я отправил в джейсон

такого просто нет .
везде будет одна синтетика- например кафку вообще никак не затестить - нужно юзать Embded а там уже не те настройки совершенно----------другие
смысл тогда ее тестировать? если по факту будет тест не твоей кафки ,а какой то искуственной херни,которую ты ток что в тесте и создал и будешь ее же тестировать лол

базу данных тестировать - нужно отельный класс рисовать - а если я хочу сразу на вход теста положить джейсон а на выходе достать запись из бд- такого нет нифига -есть

воообщем и целом как я и говорил - проще руками проверить чем вот тратить время на эти велосипеды,так как внятного инструмента я не нашел чтобы такое осуществить
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079432
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
НУ вот у меня сейчас есть план протестировать рест+ кафку+дб

Не надо.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079436
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
НУ вот у меня сейчас есть план протестировать рест+ кафку+дб

тоесть на вход я должен скормить джейсон -отправить его на наш рест - отуда послать в топик кафки - из топика достать ,записать в бд
и проверить что я записал то,что я отправил в джейсон

такого просто нет .
везде будет одна синтетика- например кафку вообще никак не затестить - нужно юзать Embded а там уже не те настройки совершенно----------другие
смысл тогда ее тестировать? если по факту будет тест не твоей кафки ,а какой то искуственной херни,которую ты ток что в тесте и создал и будешь ее же тестировать лол

базу данных тестировать - нужно отельный класс рисовать - а если я хочу сразу на вход теста положить джейсон а на выходе достать запись из бд- такого нет нифига -есть

воообщем и целом как я и говорил - проще руками проверить чем вот тратить время на эти велосипеды,так как внятного инструмента я не нашел чтобы такое осуществить


То что вы описываете больше похоже на end2end тест.
например кафку вообще никак не затестить - https://www.testcontainers.org/modules/kafka/
Там же можно и бд развернуть
Но это в любом случае уже не unit-тест.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079439
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нормальный тест был бы такой
запускается локально инстанс приложения с докер контейнером зависимостей
там инстанцируются БД,кафка и прочие нужности
и далее тест шлет на локал хост /енд поинт некий джейсон ,этот джейсон собирается в объект и отсылается в кафка топик
далее листенер видит саюж->пишщет его в базу

и проверяет записалась ли такая запись в бд
вот это был бы реально нормальный тест,а не вот эта вся резиновая мандула->
хочешь кафку тестить - ага -ну создай новую встроеную) а шо она тестирует - ну сама себя))

и вот с этими тестами по факту всегда так - тупо голимая синтетика для тестирования самой себя
в моем кейсе нет вариков как все это протестировать- только тупо руками или создать еще одно приложение,котрое будет тестировать другое
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079440
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
нормальный тест был бы такой
запускается локально инстанс приложения с докер контейнером зависимостей
там инстанцируются БД,кафка и прочие нужности
и далее тест шлет на локал хост /енд поинт некий джейсон ,этот джейсон собирается в объект и отсылается в кафка топик
далее листенер видит саюж->пишщет его в базу

Так а в чем проблема сделать такой тест? просто это не unit-тест, а что-то выше в пирамиде тестирования.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079441
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch
asv79
НУ вот у меня сейчас есть план протестировать рест+ кафку+дб

тоесть на вход я должен скормить джейсон -отправить его на наш рест - отуда послать в топик кафки - из топика достать ,записать в бд
и проверить что я записал то,что я отправил в джейсон

такого просто нет .
везде будет одна синтетика- например кафку вообще никак не затестить - нужно юзать Embded а там уже не те настройки совершенно----------другие
смысл тогда ее тестировать? если по факту будет тест не твоей кафки ,а какой то искуственной херни,которую ты ток что в тесте и создал и будешь ее же тестировать лол

базу данных тестировать - нужно отельный класс рисовать - а если я хочу сразу на вход теста положить джейсон а на выходе достать запись из бд- такого нет нифига -есть

воообщем и целом как я и говорил - проще руками проверить чем вот тратить время на эти велосипеды,так как внятного инструмента я не нашел чтобы такое осуществить


То что вы описываете больше похоже на end2end тест.
например кафку вообще никак не затестить - https://www.testcontainers.org/modules/kafka/
Там же можно и бд развернуть
Но это в любом случае уже не unit-тест.

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

такого нет пока -нужно писать такую либу - ибо будет востребована
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079442
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
Lelouch
пропущено...


То что вы описываете больше похоже на end2end тест.
например кафку вообще никак не затестить - https://www.testcontainers.org/modules/kafka/
Там же можно и бд развернуть
Но это в любом случае уже не unit-тест.

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

такого нет пока -нужно писать такую либу - ибо будет востребована

Без примера я могу в ответ написать только "пробовал, все работает, либа не нужна"
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079443
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79
НУ вот у меня сейчас есть план протестировать рест+ кафку+дб

Не надо.

да я тоже так думаю ,слишком много там подводных камней- например у нас все что нужно для работы приложения разворачивается в докер контейнере
я тут попробовал туда же тест базу прописать чтобы при выполнении тестов использовалась тест база ,но не смог) я знаю что так можно- я так делал без докера - кстати удобная фича вместо эмбдед шляпы- которая может не поддерживать половину вашего функционала
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079444
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch
asv79
нормальный тест был бы такой
запускается локально инстанс приложения с докер контейнером зависимостей
там инстанцируются БД,кафка и прочие нужности
и далее тест шлет на локал хост /енд поинт некий джейсон ,этот джейсон собирается в объект и отсылается в кафка топик
далее листенер видит саюж->пишщет его в базу

Так а в чем проблема сделать такой тест? просто это не unit-тест, а что-то выше в пирамиде тестирования.

я не представляю как написать такой тест и чтобы он не был синтетикой,там сразу кафка скажет вам привет
вы будете не свой топик тетсить а синтетик шляпу на тест конфиге
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079446
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и собственно к чему я это веду- разработка такого теста займет очень много времени и будет стоить достаточно много денег ,проверка птушником http реквест ->запрос в бд стремится к нулю по себестоимости )
вот вам и ценность ваших тестов
а если что то не дай бог поменяется - вам придется этот ,я думаю очень сложный тест ,актуализировать -а это сможет далеко не каждый сотрудник


ту лелоч- давай друг вместо балабольства реальный пример такого теста
для вводных данных обычный рест апи- кафка- постргрес
давай покажи нам класс - получи с реста объект ,прокинь его через кафку и положи в бд - и потом покажи тест как ты на вход отдаешь такой то джейсон и он ассертится с тем что ты в бд закинул-
сможешь это = я тебе памятник поставлю)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079447
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но я отвечу за тебя,чтоб ты не мучался - ты не сможешь этого сделать
для начала тебе нужен рест темплейт- чтобы отостлать сабж своему приложению
далее начинается проблема - чтобы твое приложение приняло запос - нужно использвать сприг бут тест ,который не совместим с тестом базы и скорей всего и кафкой
ты начнешь клепать моки - и я скажу тебе давай до свиданья!)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079448
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тестировать рест+ кафку+дб - это означает выполнять работу профильных админов и
девопсов (в крупном предприятии). Можешь протестировать свою дев-конфигурацию.
Отправь 1 месседж. И всё. Только сделать это 1 раз для самоконтроля и тест потом - отключить
чтоб не мешал основному циклу тестирования бизнес-функций.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079450
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
моя задумка была как авто тест- чтобы в проекте хранился образцец джейсон ,который мы нам должны прислать по кафке
я хотел что сделать
из джейсона сделать объект - послать его через продюсер в топик - далее в работу должно было включиться приложение- @KafkaListener увидев сообщение и положить его в бд
и далее в тесте ассертнтуть ожидаемое с тем что в бд легло

1.пункт я сделал- из джейсона в файле я делаю объект и кидаю его в топик
а далее тишина листенер приложения молчит - хотя в топике есть меседж-
моя мысл была такова - записать то что пришло из кафки в бд - чекнуть на соотвествтие и удалить после теста- понятно что база была бы боевая
собственно по сути все норм кроме того,что непонятно как послушать реальный топик в тесте,а не синтетичское дерьмо
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079451
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Тестировать рест+ кафку+дб - это означает выполнять работу профильных админов и
девопсов (в крупном предприятии). Можешь протестировать свою дев-конфигурацию.
Отправь 1 месседж. И всё. Только сделать это 1 раз для самоконтроля и тест потом - отключить
чтоб не мешал основному циклу тестирования бизнес-функций.

для ручного тестрования я запилил функционал - ну который типо с запроса берет джейсон кладет его в продюсер и отсылает в наш топики далее руками ты можешь посмотреть что объект лег корректно
я так понимаю что в авто режиме такое будет очень дорого стоить
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079452
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
mayton
Тестировать рест+ кафку+дб - это означает выполнять работу профильных админов и
девопсов (в крупном предприятии). Можешь протестировать свою дев-конфигурацию.
Отправь 1 месседж. И всё. Только сделать это 1 раз для самоконтроля и тест потом - отключить
чтоб не мешал основному циклу тестирования бизнес-функций.

для ручного тестрования я запилил функционал - ну который типо с запроса берет джейсон кладет его в продюсер и отсылает в наш топики далее руками ты можешь посмотреть что объект лег корректно
я так понимаю что в авто режиме такое будет очень дорого стоить

У тебя Junit-5 ? Заведи себе тег интеграции. Помаркируй этим тегом те тесты которые будут такими экзотическими.

Код: java
1.
2.
3.
4.
@Tag("kafka-db-integration")
class KafkaDbIntegration { 
   ...
}



И запускай их maven-ом отдельно. В доке по junit-5 есть описалово как это делать.

Обычные тесты - без тегов.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079453
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79
пропущено...

для ручного тестрования я запилил функционал - ну который типо с запроса берет джейсон кладет его в продюсер и отсылает в наш топики далее руками ты можешь посмотреть что объект лег корректно
я так понимаю что в авто режиме такое будет очень дорого стоить

У тебя Junit-5 ? Заведи себе тег интеграции. Помаркируй этим тегом те тесты которые будут такими экзотическими.

Код: java
1.
2.
3.
4.
@Tag("kafka-db-integration")
class KafkaDbIntegration { 
   ...
}



И запускай их maven-ом отдельно. В доке по junit-5 есть описалово как это делать.

Обычные тесты - без тегов.

у нас градл ,во вторых как я тебе выше писал все зависимостие подымаются в докер котнейнере
тоесть чтобы что то добавить туда нужен будет хороший девопс
у меня даже тест базу не получислось создать ,так какой то особый девопс секс

если бы все лежало не в контейнере - я бы просто создал тест базу - в пакете теста создал конфиг для этой базы
поднял бы контекст @SpringBootTest и скорей всего бы получил желаемое(не уверен на счет кафки) все таки ей нужен или полноценный инстанст приложения или я хз что
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079454
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для gradle - тоже параметры передаются.

Ну если все так сложно - то забей. Никто тебя не похвалит за поднятие докеров. Я так думаю.
Особенно когда речь касается рабочих станций девелоперов. Забей короче. Не нужен тебе
тест такой ценой. Пользы мало. А конфигурационных проблем масса.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079456
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
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079457
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Для gradle - тоже параметры передаются.

Ну если все так сложно - то забей. Никто тебя не похвалит за поднятие докеров. Я так думаю.
Особенно когда речь касается рабочих станций девелоперов. Забей короче. Не нужен тебе
тест такой ценой. Пользы мало. А конфигурационных проблем масса.

Так вот я эту мысль и хотел озвучить - идея теста просто прекрасна- мы по сути отестим целое направление сервиса
плюсы= никаких - так как при любом измененнии как на стороне продюсера так и на стороне консумера - вы будете править не код,а сам тест
минусы- достаточно сложная разработка с участием девопса по поднятию тестовой базы

на другой стороне весов есть некий Петро,который умеет пользваться постманом и pg4admin
он должен взять джейсон из корня проекта,положить его в тело запроса и послать запрос
зайти в базу и посмотреть на эту запись

на все про все 3 минуты ,если особо тупой QA то 10 минут

как часто нужно проводить такой тест- с той же частой ,с которой меняется дто - которым вы обмениваетесь с внешним ресурсом- тоесть в теории это один раз в год

теперь давайте посчитаем финансы 10 минут времени QA раз в год или все таки разработка теста + акутализация раз в год
я думаю даже Петро сможет увидеть разницу)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079459
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

так не пойдет
нужен рабочий пример с простейшим круд приложением - я думаю если вы начнете его делать - то мы про вас на неделю забудем)
собрать контейнер со своим приложением - уже звучит очень весело) у нас там на кафку одну безопасности всякой столько что устанешь печатать ...
вообщем лелуч - ждем от вас рабочий пример обычнго рест апи круд приложения - с тестированием
слова это все легко и вот тут все есть - не принимаются ,ибо все мы знаем что такое конфигурация )
Я тебе сразу говорю что в рамках одного теста это не получится
Ты говоришь получится- покажи код
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079460
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot asv79#22338856]
mayton

как часто нужно проводить такой тест- с той же частой ,с которой меняется дто - которым вы обмениваетесь с внешним ресурсом- тоесть в теории это один раз в год


Вообще - нет
Тест может сломать:
1) Изменение DTO
2) Изменение контроллера
3) Изменение настроек (например, поменяли context path)
4) Любое изменение бизнес-логики (например, сообщение должно долетать до БД не на каждый запрос)
5) Изменение структуры БД
6) Изменение сообщений, передаваемых через брокер
7) etc

По факту, если этот сценарий для бизнеса критичен - то этот тест вообще будет входить в каждый регресс при релизе версии
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079461
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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к/час и я предоставляю вам такой код, идет?)
Простите, бесплатно писать то, что вы сами можете собрать по ссылкам я что-то не хочу)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079462
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Lelouch#22338863]
asv79
пропущено...


Вообще - нет
Тест может сломать:
1) Изменение DTO
2) Изменение контроллера
3) Изменение настроек (например, поменяли context path)
4) Любое изменение бизнес-логики (например, сообщение должно долетать до БД не на каждый запрос)
5) Изменение структуры БД
6) Изменение сообщений, передаваемых через брокер
7) etc

По факту, если этот сценарий для бизнеса критичен - то этот тест вообще будет входить в каждый регресс при релизе версии

тут ты не прав
первый вопрос зачем контроллер? это кафка вообщето( контролер нужен лишь для теста послать самому себе сообщение)
второй ворпос по всех озвученных вами пунктах что вы будете делать? менять код теста и менять код консумера- насколько это дороже ,чем 5 минут времени QA
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079464
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
Lelouch
пропущено...

тут ты не прав
первый вопрос зачем контроллер? это кафка вообщето( контролер нужен лишь для теста послать самому себе сообщение)
второй ворпос по всех озвученных вами пунктах что вы будете делать? менять код теста и менять код консумера- насколько это дороже ,чем 5 минут времени QA

5 минут времени QA * 100 критических тесткейсов - это внезапно 2 человеко-дня тестирования. (обшибся в первый раз)
Если это необходимо выполнять при каждом выпуске версии, то экономия очевидна
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079465
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch

Хорошо, вы оплачиваете мое время из расчета 2к/час и я предоставляю вам такой код, идет?)
Простите, бесплатно писать то, что вы сами можете собрать по ссылкам я что-то не хочу)

а зачем вы пишите тут что то бесплатно уже 2й час? кто вам оплатит 4 тысячи? я точно не буду)
я так понимаю если вы вошли в тему то нужно что то показать,ссылки это хорошо,но где рабочий пример
простейший круд с кафкой и его тест - генерация минут 10 через спринг.io с 1 контроллером 1 сущностью 1 репой 1 кафкой
ну и далее ваш тест который получит в рест объект - пошлет его по кафке- вы его в тесте получите - запишите в базу и проверите что туда положили- звучит просто
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079468
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
Lelouch

Хорошо, вы оплачиваете мое время из расчета 2к/час и я предоставляю вам такой код, идет?)
Простите, бесплатно писать то, что вы сами можете собрать по ссылкам я что-то не хочу)

а зачем вы пишите тут что то бесплатно уже 2й час? кто вам оплатит 4 тысячи? я точно не буду)
я так понимаю если вы вошли в тему то нужно что то показать,ссылки это хорошо,но где рабочий пример
простейший круд с кафкой и его тест - генерация минут 10 через спринг.io с 1 контроллером 1 сущностью 1 репой 1 кафкой
ну и далее ваш тест который получит в рест объект - пошлет его по кафке- вы его в тесте получите - запишите в базу и проверите что туда положили- звучит просто

Ссылки покидать можно и бесплатно) Бесплатно писать код - я лучше issue в каком-нибудь открытом проекте поправлю)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079469
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch
asv79
пропущено...

5 минут времени QA * 100 критических тесткейсов - это внезапно 2 человеко-дня тестирования. (обшибся в первый раз)
Если это необходимо выполнять при каждом выпуске версии, то экономия очевидна

откуда взялись 100 тест кейсов ? как мы с вами выснили ранее такие кейсы возникают лишь при смене дто,все остальное от лукавого
если логика меняется - причем тут ДТО - меняйте сколько хотите - наш тест должен показат что то что мы положили в контроллер придет через кафку и ляжет в бд в том же виде
тоесть юзкейс тут только один- изменение ДТО - и как я выше писал это в лучшем случае 1 раз в год,по факту никогда
теперь давайте еще раз посчтиаем финансы
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079470
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch
asv79
пропущено...

а зачем вы пишите тут что то бесплатно уже 2й час? кто вам оплатит 4 тысячи? я точно не буду)
я так понимаю если вы вошли в тему то нужно что то показать,ссылки это хорошо,но где рабочий пример
простейший круд с кафкой и его тест - генерация минут 10 через спринг.io с 1 контроллером 1 сущностью 1 репой 1 кафкой
ну и далее ваш тест который получит в рест объект - пошлет его по кафке- вы его в тесте получите - запишите в базу и проверите что туда положили- звучит просто

Ссылки покидать можно и бесплатно) Бесплатно писать код - я лучше issue в каком-нибудь открытом проекте поправлю)

ты только что написал что твое время стоит 2 к/час- при этом ты уже 2й час тут пишешь ни о чем и самое интересное - врядли тебе за это кто то заплати- получается некий дисонанс)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079472
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я собственно не имею к тебе претензий лелуч) мое хотение чтобы это топик прочитали лиды и может быть почесали голову - а может и правда дешевле QA чем разрабов насиловать вот таким вот
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079473
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

Так вот я эту мысль и хотел озвучить - идея теста просто прекрасна- мы по сути отестим целое направление сервиса
плюсы= никаких - так как при любом измененнии как на стороне продюсера так и на стороне консумера - вы будете править не код,а сам тест
минусы- достаточно сложная разработка с участием девопса по поднятию тестовой базы

на другой стороне весов есть некий Петро,который умеет пользваться постманом и pg4admin
он должен взять джейсон из корня проекта,положить его в тело запроса и послать запрос
зайти в базу и посмотреть на эту запись

на все про все 3 минуты ,если особо тупой QA то 10 минут

Мне сложно обсуждать цифры. 3 минуты или 10 минут или раз в год. Но мой опыт подсказывает
что ты занят ерундой. Я думаю что у тебя на проекте есть тонна другой полезной работы кода надо применить свои
знания.

Если ты занимаешся этим просто изучая докер (resume-driven-development) - то я одобрительно промолчу. Делай.
Изучай. Но не стоит это преподносить как панацею. Скорее просто тебе так хочется.

Самый лучший судья тебе в этом - это code-review тоих коллег. Скорее всего они будут тебя бить за такое нововведение.

Первый-же авто-тест со стороны QA мнгновенно проверить всю твою интеграцию и даже лучше и шире во все
стороны. А твой докер - будет лишним балластом и скорее всего и его выкинут из проекта.

Это вобщем моё IMHO.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079475
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79

Так вот я эту мысль и хотел озвучить - идея теста просто прекрасна- мы по сути отестим целое направление сервиса
плюсы= никаких - так как при любом измененнии как на стороне продюсера так и на стороне консумера - вы будете править не код,а сам тест
минусы- достаточно сложная разработка с участием девопса по поднятию тестовой базы

на другой стороне весов есть некий Петро,который умеет пользваться постманом и pg4admin
он должен взять джейсон из корня проекта,положить его в тело запроса и послать запрос
зайти в базу и посмотреть на эту запись

на все про все 3 минуты ,если особо тупой QA то 10 минут

Мне сложно обсуждать цифры. 3 минуты или 10 минут или раз в год. Но мой опыт подсказывает
что ты занят ерундой. Я думаю что у тебя на проекте есть тонна другой полезной работы кода надо применить свои
знания.

Если ты занимаешся этим просто изучая докер (resume-driven-development) - то я одобрительно промолчу. Делай.
Изучай. Но не стоит это преподносить как панацею. Скорее просто тебе так хочется.

Самый лучший судья тебе в этом - это code-review тоих коллег. Скорее всего они будут тебя бить за такое нововведение.

Первый-же авто-тест со стороны QA мнгновенно проверить всю твою интеграцию и даже лучше и шире во все
стороны. А твой докер - будет лишним балластом и скорее всего и его выкинут из проекта.

Это вобщем моё IMHO.

в реальности у меня на спринте задача проверить работу нашей интеграции через кафку с внешним сервисом и
я решил тут это дело автоматизировать и понял насколько это будет трудоемко ,ну и фактически все равно это будет синтетика
( в случае с кафкой- она по другому тестрированию не поддается)
ну и тут отписался еще раз на всякий случай о том ,насколько беспомощна нынешняя система тестирования
тот кто выпустит фреймворк который позволит на вход давать а и получать ее на выходе -выйграет)
сейчас такое тестирование сродни построению какой то мкс- так как приложение имеет тонны завимостей,часть из которых в докере ,часть в облаке и тд
поэтому конечно пока QA)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079484
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
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079497
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

в реальности у меня на спринте задача проверить работу нашей интеграции через кафку с внешним сервисом и
я решил тут это дело автоматизировать и понял насколько это будет трудоемко ,ну и фактически все равно это будет синтетика
( в случае с кафкой- она по другому тестрированию не поддается)
ну и тут отписался еще раз на всякий случай о том ,насколько беспомощна нынешняя система тестирования
тот кто выпустит фреймворк который позволит на вход давать а и получать ее на выходе -выйграет)
сейчас такое тестирование сродни построению какой то мкс- так как приложение имеет тонны завимостей,часть из которых в докере ,часть в облаке и тд
поэтому конечно пока QA)


Ну дык правильно любой интеграционный тест, это сложно.
А уж тестирование интеграции, это сложно в кубе.
И кафка тут не при чем.
Самый простой способ, это подготовить тестовые кейсы.
Т.е. на вход подаем такие данные, на выходе получаем вот такие данные.
Для начала подготовить необходимый минимум.
Т.е. правильный вход - правильный результат. Много данных не надо, только то что действительно нужно.
А далее по мере эксплуатации добавлять тесты с данными, на которых возникали ошибки.
При этом должны быть "тестовая" среда.

Имхо, можно напрячь девопсов, чтобы они для прогона тестов поднимали, в кубере например, нужные докер образы (типа моков).
А в тестируемое приложение передавались параметры, что где лежит.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079757
Фотография 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 за одну минуту
вопрос был как затетист цепочку из реста+ кафка+ репа
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079788
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

то что вы сделали делается одной анотацией @DataJpaTest за одну минуту
вопрос был как затетист цепочку из реста+ кафка+ репа


Хм... зачем в этой цепочке кафка?

А так реста + кафка, можно тестировать через embedded kafka
Аналогично можно протестировать кафка + репа.

<:o)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079801
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
asv79

то что вы сделали делается одной анотацией @DataJpaTest за одну минуту
вопрос был как затетист цепочку из реста+ кафка+ репа


Хм... зачем в этой цепочке кафка?

А так реста + кафка, можно тестировать через embedded kafka
Аналогично можно протестировать кафка + репа.

<:o)

а зачем мне тестиовать эмдбдед кафка,которая к моей кафке имеет такое же отношение как я к балету?
мне нужно тестировать мою кафку с моими настройками,а зачем мне настроить эмбдед кафку и ее же тестировать?))

это что то сродни - давай я протестирую секс с негритянкой - ну на тебе шоколадный пирог ))
я про что и говорю нет инструментов то то для тестирования нормальных.
вот если бы можно было поднять в тест контейнере реплику вашего приложения со всеми зависимостями и получить некий апи- чтобы я мог перед деплоем автомтически послалатьна тестовый рест себе некий джейсон и потом силами этого чудо фремворка посмотреть что легло в базу
вот что я хочу ,а вся эта тест чехарда с эмбдед базами и кафками- анонизм - не несущий ничего кроме денег на ветер)

единственно что хочу отметить - очень неплохая либа по тестированию дата слоя zonki,очень крутой инструмент которой реплицируют вашу бд из миграциионных скриптов,использует ваши интерфейсы и по сути является почти тем ,что я хочу
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079829
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
mad_nazgul
пропущено...


Хм... зачем в этой цепочке кафка?

А так реста + кафка, можно тестировать через embedded kafka
Аналогично можно протестировать кафка + репа.

<:o)

а зачем мне тестиовать эмдбдед кафка,которая к моей кафке имеет такое же отношение как я к балету?
мне нужно тестировать мою кафку с моими настройками,а зачем мне настроить эмбдед кафку и ее же тестировать?))

С моей точки зрения тестировать кафку - это все равно что тестировать tcp-проткол.
Что ты протестируешь? Что месседж ходит по ней? Или что пароль подошёл.
В этой схеме ты тестируешь буквально настройки на соответсвие. А это вынуждает
тебя хранить в тестах полную копию настроек что само по себе ОООЧЕНЬ странно.

Другие разрабы подумают что ты нашел очень забористый кальян. Покурил его и вдруг... придумал
тестить настройки протокола.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079882
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
asv79
пропущено...

а зачем мне тестиовать эмдбдед кафка,которая к моей кафке имеет такое же отношение как я к балету?
мне нужно тестировать мою кафку с моими настройками,а зачем мне настроить эмбдед кафку и ее же тестировать?))

С моей точки зрения тестировать кафку - это все равно что тестировать tcp-проткол.
Что ты протестируешь? Что месседж ходит по ней? Или что пароль подошёл.
В этой схеме ты тестируешь буквально настройки на соответсвие. А это вынуждает
тебя хранить в тестах полную копию настроек что само по себе ОООЧЕНЬ странно.

Другие разрабы подумают что ты нашел очень забористый кальян. Покурил его и вдруг... придумал
тестить настройки протокола.

я думаю это дело времени - когда напишут такую либу

для даты уже есть зонки- которое на вход берет твои рабочие конфиги( ничего не надо нигдк проиписывать сам все найдет) и генерирует в докере инстанс твоей бд- это очень круто,ребята прям молодцы
тоже самое бы и для приложения целиком - некая либа генерирует в докере инстанст твоего приложения и дает тебе апи для написания удобных тестов- например sendT0Controoler("/fdf",Object o) и этот метод шлет твоему приложению этот объект ,оно его обрабатывает и ты его можешь например посмотреть в бд- каким то методом типо getFromDb( "tableName",...)

вот это бы уже было похоже на что то полезное - и ведь я думаю что для ребят ,которые такие фрймворки пишут - задача то прям не сильно чтобы сложная )
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079887
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

а зачем мне тестиовать эмдбдед кафка,которая к моей кафке имеет такое же отношение как я к балету?
мне нужно тестировать мою кафку с моими настройками,а зачем мне настроить эмбдед кафку и ее же тестировать?))


Потому что kafka тестировать не надо.
Тестировать настройки...
Может быть вы ещё тестируете подключение jdbc-драйверов к БД?!

ИМХО в большинстве случаев для работы с kafka, нужно указать аннотацию @KafkaListener (с нужными параметрами) для получения данных.
И использовать kafkaTemplate для передачи данных.

Embedded Kafka позволяет протестировать прием и передачу данных.

Как бы хозяин-барин.
Я просто предложил рассмотреть такое решение.
<:o)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079912
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто господа ушли от конкретной темы тестирования приватного метода в бла бла ни о чем.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079915
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
asv79

а зачем мне тестиовать эмдбдед кафка,которая к моей кафке имеет такое же отношение как я к балету?
мне нужно тестировать мою кафку с моими настройками,а зачем мне настроить эмбдед кафку и ее же тестировать?))


Потому что kafka тестировать не надо.
Тестировать настройки...
Может быть вы ещё тестируете подключение jdbc-драйверов к БД?!

ИМХО в большинстве случаев для работы с kafka, нужно указать аннотацию @KafkaListener (с нужными параметрами) для получения данных.
И использовать kafkaTemplate для передачи данных.

Embedded Kafka позволяет протестировать прием и передачу данных.

Как бы хозяин-барин.
Я просто предложил рассмотреть такое решение.
<:o)

а зачем мне тестировать то,что у меня на проекте не будет в работе? параметры как раз таки важны - там столько настоект безопасности и прочего что видя эту ямл портянку становится худо)
@Embded kaffku я знаю,не понимаю просто для чего она - если я хочу тестировать боинг а мне посовывают жигули с аргументами - а шо боенг тестировать он и в африке боинг ,бери жигули - поедут если ,значит и боенг поедет)))ну вот щас это как то так выглядит)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079926
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

а зачем мне тестировать то,что у меня на проекте не будет в работе? параметры как раз таки важны - там столько настоект безопасности и прочего что видя эту ямл портянку становится худо)
@Embded kaffku я знаю,не понимаю просто для чего она - если я хочу тестировать боинг а мне посовывают жигули с аргументами - а шо боенг тестировать он и в африке боинг ,бери жигули - поедут если ,значит и боенг поедет)))ну вот щас это как то так выглядит)


Тестировать боинг на живую дорого.
Вам предлагают аэродинамическую трубу, в которой можно протестировать макет боинга.
А вы говорите, что на макете нельзя протестировать обивку салона.
<:o)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079953
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul


Тестировать боинг на живую дорого.
Вам предлагают аэродинамическую трубу, в которой можно протестировать макет боинга.
А вы говорите, что на макете нельзя протестировать обивку салона.
<:o)

а также нельзя протестировать взлет и посадку- а лишь получить динамический коэф сопротивления)))
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079957
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul


Тестировать боинг на живую дорого.


вот наконец то до истины добрались ) тестирование в трубе дешево - но не даст ни каких результатов- в трубе нельзя взлететь или посадить самолет,испытать шасси и управление)
зато это дешево ,а мой вопрос тогда зачем вообще что то тестироовать ?
если фактически сейчас все тесты это голимая синтетика = считай твоя труба- причем и это далеко не дешево
и эти тесты не отражают толком ничего ,кроме человеко часов ,которые были потрачены впустую разработчиками
так еще все это надо поддерживать

лучший тест боинга - это летчик испытатель
лучший тест вашего приложения это тестиовщик
все остальное - называемое тестами- это такое себе
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079967
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
Долой экзамены в школах. Это тесты!
Че за бред какой то)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40079985
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тема интересная. Позвольте мне тоже тогда позадавать пару вопросов:
1. Есть у нас маппер. На входе у него объект, полученный из xml - все уровни вложенности исходной xml в объекте сохранены, на выходе - плоская entity для базы. У входного объекта около 50-60 полей (так сложилось).
Поля перекладываются со всякими разными обработками - много if'ов (если это и это поле заполнены, то заполни поле так-то), каких-то обработок строк, дат и т.д.
Для удобства навигации по классу все обработки разбиты на методы согласно вложенности xml (ну, в разумных пределах). И эти методы приватные.
С одной стороны понятно, что можно тестировать через public метод маппера, но тогда проверка правильности обработки какого-нибудь глубоко вложенного поля весьма затратно по времени (надо ведь до этого поля еще по всем условиям добраться)
С другой стороны, если написать тесты на каждый метод отдельно (например с использованием библиотечки WhiteBox), то это позволяет проверить маппинг конкретных полей быстрее и проще
Вот как лучше все же поступать? (Хотя вы тут 8 страниц обсуждали, что тестить private методы - это фуфу =) )

2. Упоминалось, что наличие mock'ов и PowerMock - это плохой тон. Можно ли чуть подробнее, почему?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080014
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein,

Надо убрать из маппинга БЛ и тестировать будет нечего.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080042
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Timein,

Надо убрать из маппинга БЛ и тестировать будет нечего.

а куда ее убрать-то? Где-то все равно эти обработки должны быть
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080047
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein
PetroNotC Sharp
Timein,

Надо убрать из маппинга БЛ и тестировать будет нечего.

а куда ее убрать-то? Где-то все равно эти обработки должны быть
по теории БЛ в сервисном слое. Маппинг после него на выходе и это простая техническая операция передачи по сети клсса user без методов и поведения.
Вы опишите что там у вас сложного
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080048
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein,
Или например маппинг входа
- усложнили что xml а не json
- усложнили что 60 полей
- усложнили что "куча if"
А теперь спрашиваете как тестировать.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080052
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein
PetroNotC Sharp
Timein,

Надо убрать из маппинга БЛ и тестировать будет нечего.

а куда ее убрать-то? Где-то все равно эти обработки должны быть

Я думаю что он прав. Если разделить эту логику на два слоя.

1) Слой мапперов (XML -> StructuredJavaObject -> PlainJavaObject)
2) Слой всяких там if-else

После этого тестирование упрощается. Да ... и когда мы тестим вход с 7-15 dimensions то лучше писать модульные
тесты которые покроют основные кейсы. И PBT-tests что-б покрыть 100500 миллиардов прочих технических кейсов.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080058
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Согласен.
Вообще сам рест придуман чтобы стандартно передавать один объект без связей чем один боооольшой большой бизнес Обь ект.
Сам тренд счас в делении (микросервисы)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080069
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Я могу путаться в терминологии.
Я правильно понимаю, что предполагается:
1) поля StructuredJavaObject впрямую переложить в PlainJavaObject1 (как есть, один к одному)
2) Из PlainJavaObject1 переложить с обработкой в PlainJavaObject2 (так как состав полей может не совпадать)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080073
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein,
Если не бъет состав полей, то это ерунда. Решаетя маппингом аннотациями.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080081
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

а можно немного подробнее каким образом? К примеру, в первом объекте у меня два поля - число и строка, а во втором пять - число и пять строк. Строка из первого объекта парсится по определенным условиям и полученные значения раскладываются по пяти полям. Как аннотацией и какой это можно сделать?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080082
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79

а также нельзя протестировать взлет и посадку- а лишь получить динамический коэф сопротивления)))


Которого вполне достаточно чтобы судить о взлете и посадке.
Т.к. в аэродинамической трубе моно протестировать и подъёмную силу.

<:o)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080086
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein,
Это нельзя.
Либо клиент не шлет вам всякую херню,
либо это БЛ и вы всякую херню пропускаете в валидатор слоя БЛ и приводите к нормальному виду.
То есть требуется сущность Юзверь а вам присылают json Футболист.
Вот вы в слое БЛ конвертите его в другую сущность.
И тест на конвертацию класса одного в другой.
Причем тут маппинг?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080089
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein,
Почему по контракту приход сущности юзверь, а приходит Футболист?
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080092
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Timein,
Это нельзя.
Либо клиент не шлет вам всякую херню,
либо это БЛ и вы всякую херню пропускаете в валидатор слоя БЛ и приводите к нормальному виду.
То есть требуется сущность Юзверь а вам присылают json Футболист.
Вот вы в слое БЛ конвертите его в другую сущность.
И тест на конвертацию класса одного в другой.
Причем тут маппинг?


Я вполне могу путаться в терминологии. С моей точки зрения это реально просто маппинг - из полей одного объекта в поля другого объекта. Ну не знаю, давайте Converter назовем, если маппер под такое не подходит
Если подкините какую-нибудь хорошую статью по архитектуре (правильному разбиению на классы и слои) приложений типа "получить данные - преобразовать данные - положить в базу", буду рад
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080095
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein,
Точной границы маппинга и конвертера нету.
Увы.
Имхо если аннотации простые вкл, выкл то маппинг. Если сложнее то бери как есть и внизу на бэке конвертируй.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080128
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein
mayton,

Я могу путаться в терминологии.
Я правильно понимаю, что предполагается:
1) поля StructuredJavaObject впрямую переложить в PlainJavaObject1 (как есть, один к одному)
2) Из PlainJavaObject1 переложить с обработкой в PlainJavaObject2 (так как состав полей может не совпадать)

Да. Но я говорю предложение по реализации исходя только из твоих слов. Исходника не видел.
А он может прояснить больше деталей. Может есть и еще более простое решение.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080132
Timein
Тема интересная. Позвольте мне тоже тогда позадавать пару вопросов:
1. Есть у нас маппер. На входе у него объект, полученный из xml - все уровни вложенности исходной xml в объекте сохранены, на выходе - плоская entity для базы. У входного объекта около 50-60 полей (так сложилось).
Поля перекладываются со всякими разными обработками - много if'ов (если это и это поле заполнены, то заполни поле так-то), каких-то обработок строк, дат и т.д.
Для удобства навигации по классу все обработки разбиты на методы согласно вложенности xml (ну, в разумных пределах). И эти методы приватные.
С одной стороны понятно, что можно тестировать через public метод маппера, но тогда проверка правильности обработки какого-нибудь глубоко вложенного поля весьма затратно по времени (надо ведь до этого поля еще по всем условиям добраться)
С другой стороны, если написать тесты на каждый метод отдельно (например с использованием библиотечки WhiteBox), то это позволяет проверить маппинг конкретных полей быстрее и проще
Это тоже хороший пример когда ради удобного тестирования прийдется нарушать инкапсуляцию.
TimeinВот как лучше все же поступать? (Хотя вы тут 8 страниц обсуждали, что тестить private методы - это фуфу =) )Часть этих восьми страниц - это как раз спор о том "это фуфу" или это просто "меньшее из зол". Этот вопрос не был решен, и стороны не согласны. На мой пример тоже никто не смог придумать как удобно протестировать и одновременно сохранить инкапсуляцию..
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080134
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,
>Это тоже хороший пример когда ради удобного тестирования прийдется нарушать инкапсуляцию.
= я бы написал, ради удобного тестирования надо убрать архитектурные косяки в проекте)
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080135
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Часть этих восьми страниц - это как раз спор о том "это фуфу" или это просто "меньшее из зол". Этот вопрос не был решен, и стороны не согласны. На мой пример тоже никто не смог придумать как удобно протестировать и одновременно сохранить инкапсуляцию..

Ты про собственные рукотворные хеш-таблицы? Я думаю что для 80% бизнес-кода (который тут обычно обсуждают)
должен следовать принципу SingleResponsibility и этот вопрос решен автоматом. Автор выше хотел сделать
несколько ответсвтенностей на одном классе и понял что растет сложность тестирования. Комбинаторно растет.

Оставшиеся редкие артефакты.... как-то твои хеш-таблички или мои графы или еще бох знает какие тонкие материи
дейтвительно можно взламывать, инструментировать и достигать каких-то своих целей. В языках наподобие С++
для этого есть пре-процессор или макро-процессор. А у нас... ну вот у нас всякие подлые штучки типа Мокито.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080143
maytonТы про собственные рукотворные хеш-таблицы?Нет, я про проблему с командами для роботов.
maytonА у нас... ну вот у нас всякие подлые штучки типа Мокито.Во-первых, мокито нарушает инкапсуляцию еще больше чем открытие private методов (мы знаем какой конкретно метод какой код будет вызывать). А во-вторых.. я в принципе не понимаю причем он тут.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080146
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,
Ну вот. Когда нет конкретики, нет и разговора для обсуждения. Нечего обсуждать.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080147
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за команды для роботов? Сорян.. я видимо где-то пропустил.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080150
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если уж говорить о тестиовании приватных методов -и возникла такая необходимость обявить их пекейдж приватными
я у себя как раз так и сделал
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080375
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Тестирование private методов
    #40080738
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот выше советовали EmbedKafka.

Вот Баелдунг пишет очередную статью на тему такого тестинга в Spring-application

https://www.baeldung.com/spring-boot-kafka-testing

По моему вполне себе удобно.

Девопсовские вопросы... всякие там брокеры, кластеры, ЗУ-киперы, репликации нагрузки и SLA и перформанс можно другой темой толкнуть.

Кто за?
...
Рейтинг: 0 / 0
215 сообщений из 215, показаны все 9 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Тестирование private методов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]