|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
Добрый день, только вот начинаю осваивать этот фреймворк и возник вопрос по поводу того, что такое успешный тест. Столкнулся с тем, что у меня во время работы кода бывает выкидываются исключения и assertEquals не вызывается, а тест все равно пишет что он ок. Просто я изначально полагал, что тест успешный, когда обязательно выполняется условие assertEquals, а что делать в случае когда до выполнения этой проверки что-то отваливается? Вот например гипотетический кусок кода, где все может свалиться до assert, например из-за кривой работы метода measure(), а мне нужно убедиться в том что датчик измеряет данные корректно. В итоге при моей организации кода в методе measure сбой, а я об этом и не узнаю. Можно как-нибудь обозначить, что условия assertEquals( sut.measure(), 22) [b]обязательно должно выполниться.[/] Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 12:40 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
da17, Обработай исключение либо вообще убери try ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 12:52 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp da17, Обработай исключение либо вообще убери try метод может выбросить исключение, убрать не получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 12:57 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
da17, Я сказал ИЛИ обработай ИЛИ убери. Тогда исключение обработает функция выше ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 13:28 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
Ты же точно знаешь что оно не будет брошено. Тогда просто декларируй. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
Или если в другом тесте тебе надо точно проверить что оно брошено - тогда - как здесь https://howtodoinjava.com/junit5/expected-exception-example/ ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 13:42 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
da17 PetroNotC Sharp da17, Обработай исключение либо вообще убери try метод может выбросить исключение, убрать не получится. Можно тестировать исключения . :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 18:12 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
я вот так переписал Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Что бы гарантированно поток выполнения добрался до строки assertEquals(air_temperature, 22). Может быть можно как-нибудь аккуратней? Есть ли возможность вообще не задумываться о том будет выброшено исключение или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 22:22 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
С точки зрения JUnit тест успешный в том случае когда из него не выбросилось исключение. Исключение может выброситься: 1. Твоим кодом 2. assertXxx() методами (они выбрасывают AssertionError) Соответственно если исключение не выбросилось (или выбросилось, но ты его отловил), то тест будет считаться успешным. При написании теста ты точно должен описывать условия чтоб результат не был разным от запуска к запуску. Т.е. 1. Либо тестируемый код никогда не выбрасывает исключений намеренно и тогда assertXxx() методы все выполняться в любом случае 2. Либо он всегда выбрасывает и тогда тест нужно так написать, чтоб он ожидал исключения. Вот 3 способа написать такой тест в JUnit4: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
А если твой код просто объявляет throws Exception, но при этом в тесте он на самом деле не выбросит исключение, то просто не отлавливай его в тесте: Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2021, 22:49 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
da17, Я обработку всех неожиданностей делаю в коде а не в тестах. Поэтому скептически к ним отношусь. У меня в самом коде написано что делать если пришло не 22. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 07:29 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp da17, Я обработку всех неожиданностей делаю в коде а не в тестах. Поэтому скептически к ним отношусь. У меня в самом коде написано что делать если пришло не 22. Как бы одно другому перпендикулярно. Юнит-тесты, нужны для фиксации поведения класса/метода. При этом не явно имея ввиду, что класс/метод является stateless. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 07:36 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
mad_nazgul, Докажи. Нафига тестировать 22 если числа нет в БЛ? Ради чего? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 07:51 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
Тесты перпердикулярны жизни (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 07:53 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mad_nazgul, Докажи. Нафига тестировать 22 если числа нет в БЛ? Ради чего? Действительно нафига? :-) Грубо говоря мы тестируем, например функцию, что должны получить, если подать не корректные значения. Т.е. как мы реагируем, на не стандартную ситуацию. И это поведение мы фиксируем в тесте. Тесты определяют область определения и область значений, и реакцию, когда выходим за область определения. В этом как бы весь смысл юнит-тестов (неявно предполагая, что тестируем stateless) А вот уже БЛ тестируется в интеграционных тестах. Несколько другой инструмент. Вот там как раз важно состояние, нужно подготавливать специально тестовые данные, поднимать хранилище данных с нужными данными и т.д. Это более дорогое тестирование. ИМХО юнит-тест это средство для разработчика, как например отладчик или "System.out.println". Им можно пользоваться, можно не пользоваться. Просто если есть юнит-тесты, то проще читать код. Т.к. правда в коде и отчасти в тестах. Всё остальное обычно врет. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 08:18 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Тесты перпердикулярны жизни (с) Вы просто не умеете их готовить (с) Не мой. <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 08:19 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
mad_nazgul, Пример с 22 противоречит всему тому что ты написал. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 08:23 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
mad_nazgul, >юнит-тест это средство для разработчика, как например отладчик или "System.out.println". = да! Выше пример не тесты а извращенный отладчик чтобы узнать 22 ли на выходе ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 08:27 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mad_nazgul, Пример с 22 противоречит всему тому что ты написал. Конкретно чему противоречит? Есть юнит-тесты, которые тестируют stateless функциии/классы. Есть модульные/интеграционные тесты, которые тестируют statefull функции/классы. Если есть "состояние" это не юнит-тест. Statefull тестировать дорого. Либо нужно поднимать нужный контекст, либо обмазываться моками. И то, и то "дорого", читай "не удобно". Юнит-тест это инструмент разработки, а не тестирования. В рамках методологии TDD. И они (юнит-тесты) удобны/не удобны, в рамках умеет/не умеет программист этим инструментом пользоваться. Еще раз юнит-тесты не про тестирование, юнит-тест про разработку. P.S. Лично мне удобно, когда на проекте есть юнит-тесты, и они работают. Т.к. они "правда", почти такая же, как код. Что не скажешь о модульных/интеграционных тестах, особенно обмазанных моками. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 07:13 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mad_nazgul, >юнит-тест это средство для разработчика, как например отладчик или "System.out.println". = да! Выше пример не тесты а извращенный отладчик чтобы узнать 22 ли на выходе И... Норм решение, чтобы не смотреть глазами 22. В чем проблема? Написали код, который за нас смотрит 22. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 07:14 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
mad_nazgul PetroNotC Sharp mad_nazgul, >юнит-тест это средство для разработчика, как например отладчик или "System.out.println". = да! Выше пример не тесты а извращенный отладчик чтобы узнать 22 ли на выходе И... Норм решение, чтобы не смотреть глазами 22. В чем проблема? Написали код, который за нас смотрит 22. Я лично смотрю в консоли или в дебаге или в логах. Это быстрее. авторЮнит-тест это инструмент разработки, а не тестирования. Я понял твою мысль. Обдумать надо) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 07:26 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
mad_nazgul, >Лично мне удобно, когда на проекте есть юнит-тесты, и они работают. То есть сделал git commit и пошло все исподнее в хранилище для всех? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 08:57 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mad_nazgul пропущено... И... Норм решение, чтобы не смотреть глазами 22. В чем проблема? Написали код, который за нас смотрит 22. Я лично смотрю в консоли или в дебаге или в логах. Это быстрее. Я же говорю System.out,println :-) Мне когда надоедает глаза ломать, пишу небольшой тестик, с assert-ами. Даже не юнит. Правда эти отладочные тесты "хрупкие" и их в прод нельзя выводит. Но если приложить усилия, то можно из них сделать юнит- или модульный/интеграционный тест. Т.к. понятно что проверяем. С юнит тестами основной блокер, что они удобны только в рамках TDD. При других способах разработки и формальном использовании это не самая удобная вещь. А TDD ну очень специфичный способ разработки. Чтобы научиться, нужно "забыть", как делал раньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 08:58 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
mad_nazgul Есть юнит-тесты, которые тестируют stateless функциии/классы. Есть модульные/интеграционные тесты, которые тестируют statefull функции/классы. 1. Модульные тесты - это то же самое что unit tests. Одно - по-русски, другое - по-английски. 2. Модульные тесты могут тестировать хоть классы с состоянием, хоть без. 3. Интеграционные тесты ( каким бы ни было отвратительным это название ) - это когда хотя бы одно условие соблюдается: есть обращение к внешним ресурсам (БД, другой сервис) или поднимаем для теста приличный кусок приложения (e.g. инициализируем спринг контекст). mad_nazgulЮнит-тест это инструмент разработки, а не тестирования. В рамках методологии TDD. И они (юнит-тесты) удобны/не удобны, в рамках умеет/не умеет программист этим инструментом пользоваться. Еще раз юнит-тесты не про тестирование, юнит-тест про разработку.Они и про то, и про другое. Но эти тесты могут писаться и не по TDD и при этом оставаться тестами. Так что в первую очередь они все-таки про тестирование. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 09:42 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
mad_nazgul, Имхо ты заузил сабж слишком сильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 09:46 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
Для крупных проектов тесты могут быть готовой документацией. Если кто-то из коллег настолько самоуверен или смел что никогда не пишет тестов - следовательно он должен где-то сохранять инфу о поведении разрабатываемых компонентов. Будет ли это документация JavaDoc или confluence.. неважно. Важно что эта инфа где-то остается кроме кода. Потому-что для newcomer который приходит в ваш проект будет трудно читая код глазами понять для чего он и как работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 13:58 |
|
Когда тест в junit считается успешным.
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Поправлю по терминологии/концепциям: 1. Модульные тесты - это то же самое что unit tests. Одно - по-русски, другое - по-английски. 2. Модульные тесты могут тестировать хоть классы с состоянием, хоть без. 3. Интеграционные тесты ( каким бы ни было отвратительным это название ) - это когда хотя бы одно условие соблюдается: есть обращение к внешним ресурсам (БД, другой сервис) или поднимаем для теста приличный кусок приложения (e.g. инициализируем спринг контекст). Не совсем так. unit-тесты в понимании методологии TDD, это тест, который не имеет контекста. Но, например, в Spring Test контекст явно имеется, и для тестирования нужно его поднятие, с соответствующей настройкой контекста. Это уже не unit-тест, т.к. то что мы тестируем явно имеет состояние, которое мы должны передать тесту. И оно может быть разным в зависимости от окружения. Например, в зависимости от переменных среды. Мне удобнее называть их модульными/интеграцонными тестами. Т.к. они уже не unit, но ещё не полноценные интеграционные тесты. ИМХО правильнее их называть все таки интеграционными тестами, т.к тестируется часть контекста спринга. Stanislav Bashkyrtsev mad_nazgulЮнит-тест это инструмент разработки, а не тестирования. В рамках методологии TDD. И они (юнит-тесты) удобны/не удобны, в рамках умеет/не умеет программист этим инструментом пользоваться. Еще раз юнит-тесты не про тестирование, юнит-тест про разработку. Не совсем. Поведение программы тестируют интеграционные тесты. Т.к. они воспроизводят некоторую последовательность действий. И проверяют результат. Unit-test определяет область определения и область значений функции/класса. Можно написать 100% правильные unit-test со 100% покрытием кода, а на выходе получить не работающую программу. Кроме того, unit-test имеет смысл писать ДО написания реализации, а не ПОСЛЕ. Т.к. дизайн функций/классов может оказаться таким, что написать unit-test без глубокого рефракторинга не возможно. Пример . ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 07:56 |
|
|
start [/forum/topic.php?fid=59&startmsg=40073080&tid=2120433]: |
0ms |
get settings: |
15ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
38ms |
get topic data: |
4ms |
get forum data: |
1ms |
get page messages: |
446ms |
get tp. blocked users: |
1ms |
others: | 375ms |
total: | 888ms |
0 / 0 |