|
|
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
Как оно реализуется, я примерно представляю, в интернете полно примеров. Кроме того, некоторые вещи для меня там понятны, к примеру полезная штука аннотация "@Before" или "@After". Иногда удобно выполнить какие то надстроечные действия до и после запуска класса. У меня вопрос в другом: Почему я не могу вместо объявления метода тестовым просто влепить туда if и, при выполнении условия вывести какой-нибудь "ShowMessage" о том, что "ожидаемое значение" не соответствует фактическому ? Если ошибки нет - всё хорошо, я никаких сообщений не увижу, если есть - всплывет Showmessage. Или основная ценность JUnit состоит в том чтобы вываливаться в exception каждый раз когда тест не проходит? Поясните пожалуйста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 06:06 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 07:36 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
MAULERКак оно реализуется, я примерно представляю, в интернете полно примеров. Кроме того, некоторые вещи для меня там понятны, к примеру полезная штука аннотация "@Before" или "@After". Иногда удобно выполнить какие то надстроечные действия до и после запуска класса. У меня вопрос в другом: Почему я не могу вместо объявления метода тестовым просто влепить туда if и, при выполнении условия вывести какой-нибудь "ShowMessage" о том, что "ожидаемое значение" не соответствует фактическому ? Если ошибки нет - всё хорошо, я никаких сообщений не увижу, если есть - всплывет Showmessage. Или основная ценность JUnit состоит в том чтобы вываливаться в exception каждый раз когда тест не проходит? Поясните пожалуйста! Основная задача- не дать собрать новую версию, если тысты не проходят. Т.е. maven, к примеру, просто откажется продолжать работу, если тест упал. Т.е. раз написав тест ты можешь (хе хе...) быть уверенным, что этот код всегда будет работать верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 07:59 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
Alexey TominОсновная задача- не дать собрать новую версию, если тысты не проходят. Т.е. maven, к примеру, просто откажется продолжать работу, если тест упал. Т.е. раз написав тест ты можешь (хе хе...) быть уверенным, что этот код всегда будет работать верно. Т.е. тот же мэйвен просто не соберет jar-ник, или War-ник если хотя бы один тест провалится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 08:12 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
MAULERТ.е. тот же мэйвен просто не соберет jar-ник, или War-ник если хотя бы один тест провалится? Да, если тесты не отключать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 09:28 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
Для меня лично все эти тесты всегда были загадкой, точнее ненужной вещью, лишней. Но! Это видимо потому, что я пишу один, когда же есть команда, наверняка они помогут не пропустить косячный код/логику в продакш. Я прав?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 10:05 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
NixicДля меня лично все эти тесты всегда были загадкой, точнее ненужной вещью, лишней. Но! Это видимо потому, что я пишу один, когда же есть команда, наверняка они помогут не пропустить косячный код/логику в продакш. Я прав?) Это большая и флеймовая тема. Кто-то пишет юнит тесты, кто-то пишет интеграционные тесты, кто-то не пишет никаких. Тесты зачастую большой геморрой при рефакторинге, как бы ты правильно не старался их написать. С другой стороны - да, хорошее покрытие тестами заменяет QA отдел и позволяет выпускать стабильный софт регулярно, не опасаясь критических регрессий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 10:13 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
Вообще юнит тестирование - важная вещь при разработке больших и не очень систем. Его основная задача проверить работоспособность конкретного компонента подсовывая ему так называемые заглушки (стабы и моки), цель которых отсечь этот конкретный компонент от взаимодействия с другими т.е. создать ему искусственную среду. Тогда если ваш тест валится то можно с полной уверенностью сказать, что проблема именно в этом компоненте, а не в другом где в результате ошибки возникшей в этом другом компоненте тест завалится. На примере - если вы пишите тест public метода какого то класса и во входящих параметрах которого есть другие объекты классов - так вот их обязательно заменяют на заглушки, иначе ошибки возникшие в этих параметрах при отработке вашего теста завалят этот тест, хотя сам тестируемый метод как бы и не причем. Забыл сказать, что целью юнит тестирования обычно является проверка адекватной отработки какой то бизнес логики и как бы не имеет отношения к стресс тестированию и другим всяким тестированиям. И еще юнит тесты очень трудно использовать в проекте, скажем так, очень динамичном, где все постоянно переделывается по сто раз на дню в угоду заказчику или по другим причинам, т.к. цель у тестов прямо противоположная - это "зацементировать" кучу написанного кода, которое вроде как не должно подвергаться серьезным изменениям - например ядро какой то учетной системы и т.д. Все выше описанное - имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 10:42 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
MAULER, То, что вы описали - это тестирование через assert. Т.е. когда в рабочий код вписываются дополнительные условия, проверяющие на инварианты типа "если в этом списке меньше 2 элементов, то это баг". Главная проблема ассертов в том, что они обнаруживают баги слишком поздно - на машине пользователя. Поэтому их польза ограничена - они могут спасти данные пользователя от порчи сглючившей программой и дать разработчику дополнительную информацию для отладки - ну и всё. А обе этих задачи отлично решаются констрейнтами на базе и стектрейсами. Юнит-тесты же позволяют находить баги ДО передачи программы пользователю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 11:37 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
тесты для того, чтобы проверить - что сломали пока правили другой код но юнит-тесты зло: 1. чтобы покрыть код тестами на 100% их надо написать число стремящееся к бесконечности 2. если не покрывать 100% - падать будет там где тестов нет 3. если покрыть на 100% - очень трудно вносить изменения в код, одна правка - переписываешь сотню-тысячу тестов 4. по идее тестом можно покрыть очень маленький класс редко изменяемый с простой функцией, но как правило там очень простой код и смысла его тестировать нет, проблемы обычно изза многообразия комбинаций маленьких простых классов и методов 5. отсюда следует что вместо тестов надо писать хороший код - простой, мелкий, структурировать его, уменьшать число зависимостией и комбинаций - не придеться тестировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 11:43 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
Вообще я бы сказал, что идея юнит-тестирования основана на следующих принципах: - чем меньше кусок кода, тем легче доказать его правильность (подобрав набор входных и выходных данных) - код, который не выполняется, деградирует (в нем начинают накапливаться баги) - автоматическое тестирование лучше ручного ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 11:45 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
17-77, Почти, только не вместо, а вместе. Тесты обычно пишутся для самого критичного или самого хрупкого функционала. Тогда с ростом кол-ва тестов их полезность падает, а стоимость написания и поддержки растет. По экспоненте. Искусство тут в том, чтобы правильно угадать точку, где надо остановиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 11:48 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
scf17-77, Почти, только не вместо, а вместе. Тесты обычно пишутся для самого критичного или самого хрупкого функционала. Тогда с ростом кол-ва тестов их полезность падает, а стоимость написания и поддержки растет. По экспоненте. Искусство тут в том, чтобы правильно угадать точку, где надо остановиться. Это интеграционные тесты. А юнит-тесты тестируют очень небольшой метода класса. Таким образом, impact от рефакторинга минимизируется. Но это всё в теории. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 11:54 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
Благодарю всех. Нашел Видео: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 13:06 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
MAULER , я понимаю твои сомнения. Сам лет 10 назад вообще не понимал для чего модульные тесты. Но если философски - то это страховка. Ты заведомо тратишь +20% рабочего времени на написание неких утверждений. Или стайтментов. В отношении неких частей кода. Буквально - ты утверждаешь что дескыть "этот чёрный ящик" работает так-то и так-то. И если какой-то разработчик за 5 минут до релиза СЛОМАЛ тест то ты об этом вкурсе. Страховка сработала. Разрабочик получил по башке. И ты откатил взад неверный коммит. Релиз после этого стал стабилен. В нем нет (практически) непредвиденных ситуаций. Все чёрные ящики покрыты (закреплены) для регресса. КАК писать эти тесты. Какие части покрывать. Как тестить ГУИ. - Это всё идет тебе на откуп. Ты сам решаешь где у тебя важная часть (в любом коде всегда есть некое ядро или набор функций которые должны быть неизменные). Разумеется соблюсти баланс 20 на 80 - это чисто твоя задача. И самое главное что заказчику вобщем-то пофиг. Ему неважно есть ли тесты или нет. А тебе должно быть важно есть ли страховка от нежданчиков. Вот как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 17:07 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
Бывает, что один и тот же баг появляется снова и снова. Вообще, это может быть потому, что плохо написан код, но может быть и по другим причинам. В этом случае тесты особенно полезны. Насчет 20% - это очень оптимистично. Нормально протестировать - я бы сказал, от 400%. Хотя, это зависит от конкретной задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2015, 23:44 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
Я имею в виду философское правило Парето. В затратах на разработку тестов. Но и не буду возражать по поводу ваших метрик. Хотя из практики. Современное трехзвенное бизнес-приложение очень сложно покрыть тестами особенно в части MVC/MVP например. Или в части интеграции с БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2015, 13:25 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
MAULERИли основная ценность JUnit состоит в том чтобы вываливаться в exception каждый раз когда тест не проходит? Поясните пожалуйста! JUnit это просто еще один инструмент для разработчика. По идее Unit-тестами нужно покрывать весь код. Но обычно так никто не делает. Я использую JUnit когда нужно оттестировать какую-то БЛ. А в ручную лень. Тогда пишу тесты, с покрытием "типичных", по моему мнению, случаев. Unit-тесты плохо подходят для тестирования фронтенда, и клиентов к сервисам... В общем случае для прикладного программиста круг задач в которых можно использовать Unit-тесты ограничен. Зато для написания "фреймворков" не заменимая вещь. Т.к. имеется "API" которое должно "не ломаться" при изменении. Т.е. если вы пишите сервис, то да Unit-тесты к месту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 07:30 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТесты зачастую большой геморрой при рефакторинге, как бы ты правильно не старался их написать. С другой стороны- они и помогают. Да, когда меняется API класса, то юнит-тесты приходится серёзно переделывать. С другой- наличие тестов это хорошее описание того, что за фигня тут написана (документация может устареть, а тесты гарантировано верны). Более того, внимательный взгляд на тесты иногда позволяет найти ошибку. Бывало в мой практике, что указание в ревью "а вот этот вариант не протестировал" выводило на ошибкк в логике кода (которую не видел ни автор, ни ревьюверы). BlazkowiczС другой стороны - да, хорошее покрытие тестами заменяет QA отдел и позволяет выпускать стабильный софт регулярно, не опасаясь критических регрессий. Не заменяет, а позволяет разгрузить их от мартышкиного труда и регрессионных тестов, а направить на поиск нетривиальных багов а новой функциональности и на стыках систем. В целом. 1. Это инструмент, один из многих. Это не решение всех проблем, но это решение _некоторы_ проблем. 2. Чем правильнее код- тем проще тестировать его юнит-тестами. 3. 100% это малореально, тестировать астеничные сущности мало кто будет- разве что ради красивого числа в сонаровском отчёте :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 08:24 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
chabapok, 400% Это тоже оптимистично. В общем случае там степенная функция от сложности исходной задачи. :) Другое дело если у тебя есть четкие правила, которые обязательно должны выполнятся. Ну например rfc-шка какая-нибудь, html5 стандартик и пишешь ты браузер. Значится одни программисты пишут тесты по стандарту. Другие сам браузер. Ну и каждую новую версию можно проверить. Некоторые браузеры, говорят, на 90% вышли. :) Однако никто релизы не отменял. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 10:18 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
Реально тесты полезны когда вы залили OVER 1000 изменений ваших коллег в свою ветку и первая мысль - Что то сломалось? Как проверить что всё валидно. Одной фазы compile - недостаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 13:59 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
девелоперские тесты должны быть, вопрос только в том в каком виде и сколько. Это приходит с опытом, при разработке API тесты конечно важнее, чем для сферической энтерпрайз системы в вакууме. Единственное чего не могу терпеть и от чего меня корежит, так от требований в духе - код должен быть покрыт на Х процентов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 14:22 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
maytonРеально тесты полезны когда написаны с умом. IMHO - главная глупость тестов это попытки написать их тем же программистом, что и пишет код. Типа сам придумал как ошибиться сам и ошибся. В принципе они полезны в ситуации, когда есть разрозненная и (или) сильно растянутая во времени разработка. Но писать нужно тесты не на свой код, а на вызываемый из своего. Например, из твоего кода вызывается метод библиотеки, которому передается последовательность точек, а он возвращает плоский многоугольник. Вот для метода и пишешь тесты - меньше двух точек - определенное исключение, возвращенная фигура именно плоский многоугольник, самопересечения в маршруте - определенное исключение. Тогда, при развитии системы, если метод поменяют - загорится красный квадратик - и будет понятно, что ваш код работать перестанет. И дальше надо будет решать, что делать. Сугубо IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 14:39 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевIMHO - главная глупость тестов это попытки написать их тем же программистом, что и пишет код. Типа сам придумал как ошибиться сам и ошибся. Не всегда, даже скорее так делать правильно, чем неправильно. Тесты других программистов - это полезное дополнение. Да, программист видит все под своим углом, и не сможет найти баги, но на то есть QA и когда ты фиксишь очередной баг - просто добавляешь тест кейс и все. К тому же когда пишешь сам - то четко понимаешь как будут вызывать свой код и меняешь свой код чтобы было яснее или удобней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 15:15 |
|
||
|
Объясните пожалуйста, зачем нужно UNIT-тестирование. Конкретно JUnit ?
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевmaytonРеально тесты полезны когда написаны с умом. Согласен. Но писать нужно тесты не на свой код, а на вызываемый из своего. Здесь мне кажется требование всё таки ближе к контракту чем к Junit-test. По поводу регресса. Сейчас покрываю тестами чужой код. Работа с XML-документами определённого стандарта в медицине. И начинаю с самого простого. Тоесть беру всё API что есть и даю на вход краевые значения. Тоесть там где на вход идёт документ - передаю умышленно null. Фиксирую поведение через Expected = NPE. И добавляю аннотации @Nullable/@NotNull. Очень полезная штука. FindBug и Сонар и почти все среды разработки умеют делать инспекцию кода по ним. И подсвечивают цветом в вызывающем коде потенциально опасные места. Это даёт возможность код-ревьюеру видеть на ход вперёд то что нужно еще доделать или ужесточить проверками. Способ мной уже опробован не один год. Всем рекомендую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 15:44 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39125475&tid=2124558]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
175ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
88ms |
get tp. blocked users: |
2ms |
| others: | 277ms |
| total: | 589ms |

| 0 / 0 |
