При использовании Mockito для издевательств за исключением, несколько общих ошибок могут сделать ваши тесты менее эффективными или трудными для поддержания. Вот некоторые из этих ловушек и как их избежать:
1. Перевернутая **
Одна из наиболее значительных ловушек-это изгибание. Это происходит, когда вы издеваются над слишком много зависимостей, что приводит к тестам, которые хрупкие и трудные для поддержания. Перепрофилирование может привести к тому, что тесты больше сосредоточены на макетах, чем на фактическом поведении тестируемой системы. Чтобы избежать этого, сосредоточьтесь на издевательствах только на соавторках, которые имеют нетривиальное поведение, или на тех, чьи взаимодействия вы хотите проверить. Используйте реальные экземпляры для простого сотрудничества [3].2. Неверные исключения **
Mockito гарантирует, что исключение является действительным для конкретного загрязненного метода. Если вы попытаетесь бросить исключение, которого нет в списке исключений метода, Mockito будет жаловаться. Например, если метод не объявляет «ioException», попытка издеваться над ним, чтобы бросить `ioException`, приведет к ошибке [1]. Всегда убедитесь, что высмеиваемое исключение является действительным для метода.3. Использование `thenthrow ()` с помощью void методов **
`when (). Thenthrow ()` не может использоваться с помощью пустого метода, потому что нет возвратного значения для макета. Вместо этого используйте `dothrow ()` для методов пустоты. Неправильно смешивание этих методов может привести к ошибкам [2].4. Отсутствие специфичности **
При насмешливых исключениях, очень важно быть конкретным в отношении того, какие исключения вы тестируете. Избегайте переоценки, сосредотачиваясь на исключениях, имеющих отношение к тестовому сценарию. Это помогает поддерживать тесты и сфокусируемые тесты [2] [8].5. Неправильная обработка казней **
Убедитесь, что код приложения готов правильно обрабатывать исключения, даже при насмешливых во время тестов. Это включает в себя тестирование логики для обработки исключений, чтобы убедиться, что она ведет себя так же, как и ожидалось [2].6. Использование значимых сообщений об ошибках **
При насмешливых исключениях, включите значимые сообщения, чтобы помочь диагностировать проблемы, если тесты не проходят. Эта практика повышает ясность и эффективность ваших тестов [2].7. тестирование логики обработки исключений **
Убедитесь, что код обрабатывает исключения, как и ожидалось. Это включает в себя проверку того, что приложение ведет себя правильно, когда исключения будут отменены, что имеет решающее значение для создания устойчивых приложений [2].8. Сброс и очистки макетов **
Mockito предоставляет такие функции, как `Reset ()` и `clearInvocations ()` для управления макетами. Однако их следует использовать экономно. Сброс макета следует выполнять только в редких случаях, например, когда контейнер вводится макетом и не может быть воссоздан для каждого теста. Призывы к устранению могут быть полезны, если воссоздание макета приведет к значительному накладным расходу [1].Осознавая эти ловушки и следование передовым практикам, вы можете эффективно использовать Mockito, чтобы высмеивать исключения и убедиться, что ваши тесты являются надежными и поддерживаемыми.
Цитаты:[1] https://www.toptal.com/java/a-guide-te-everyday-mockito
[2] https://www.browserstack.com/guide/mockito-throw-exception
[3] https://javanexus.com/blog/avoiding-mockito-testing-pitfalls
[4] https://stackoverflow.com/questions/9186604/mockito- Exception-when-requires-an-argument-which-has-be-a-method-call-on
[5] https://stackoverflow.com/questions/22540108/best-practices-with-mockito
[6] https://stackoverflow.com/questions/52512548/mock-method-to-do-not-throw-an-exception/52514628
[7] https://contributors.scala-lang.org/t/mockito-testing-nulls-and-exceptions/3915
[8] https://www.janbasktraining.com/community/java/throw-checked-exceptions-from-mocks-with-mockito