Почему SonarQube жалуется на общее исключение, когда исключение было изменено на пользовательское

avatar
enrique marmolejo
8 августа 2021 в 19:19
127
3
0

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

public String clean(String url) throws Exception {
    if (url.indexOf(invalidURL) {
        throw new Exception("Severe XSSS detected");
    }
}

Я пишу свой тест с помощью: throws Exception, и SonarQube жалуется на общее исключение, и если я пишу пользовательское исключение, например: public class MyException extends Exception, все равно SonarQube это не нравится, любая помощь будет очень признательна!

Источник
njzk2
8 августа 2021 в 19:21
0

"все еще сонаркубу это не нравится" ?

McPringle
8 августа 2021 в 19:42
0

Вы могли бы быть более точным: какое точное сообщение об ошибке от SonarQube? Это может помочь понять, какое правило здесь работает. SonarQube использует множество инструментов с сотнями правил…

Ответы (3)

avatar
David M. Karr
9 августа 2021 в 15:14
0

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

Если вы не можете реально изменить тестируемый код, вы не сможете решить проблему с SonarQube.

avatar
agabrys
9 августа 2021 в 13:52
0

MyException расширяет Exception, поэтому вам также нужно изменить объявление метода - оператор throws:

public String clean(String url) throws MyException {
   if (url.indexOf(invalidURL) {
      throw new MyException("Severe XSSS detected");
   }
}

Изменение безопасно, поскольку код совместим с предыдущим вариантом:

try {
    object.clean("invalidUrl")
} catch (Exception e) {
    // MyException is handled by this catch block
}
enrique marmolejo
10 августа 2021 в 01:11
0

Мне не разрешено изменять объявление метода, но спасибо за помощь, я закончил использовать "//NOSONAR", чтобы избежать запаха кода

agabrys
10 августа 2021 в 12:16
0

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

enrique marmolejo
12 августа 2021 в 01:03
0

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

avatar
McPringle
8 августа 2021 в 19:40
1

Я интерпретирую ваш код: похоже, у вас где-то неверный URL-адрес, и вы не хотите заниматься своими делами, если параметр url содержит этот недействительный URL-адрес. Поэтому я предполагаю, что IllegalArgumentException намного точнее, чем общий Exception.

Из JavaDoc IllegalArgumentException:

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

Кроме того, я предполагаю, что SonarQube примет IllegalArgumentException в этот момент без ворчания.