Java — поиск методов, используемых только в тесте (неиспользуемых в исходном коде)

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

The method myMethod() from the type MyClass is never used locally

Но иногда вы пишете код с его модульным тестом, и после этого код не используется (или удаляется) в производстве, но метод все еще используется (только) для модульного теста.

Как мы можем найти такие неиспользуемые методы, которые не используются в реальном коде (только тестовый код)

  • Мои тесты находятся в папке тестов и коде в папке src

Например, метод DAO:

public interface TransactionDao {

   public boolean updateTrasaction(int id);
}

@Repository
public class TransactionDaoImpl implements TransactionDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Override
    public boolean updateTrasaction(int id) {
        return (jdbcTemplate.update(... )>0);
    }
}

используется только в тесте:

@Test   
public void testUpdateTrasaction() {
    Assert.assertEquals(transactionDao.updateTrasaction(1234), true);
}

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

Почему бы просто временно не удалить все тестовые пакеты, а затем проверить неиспользуемые методы? Очень простое решение без каких-либо инструментов и т. д.

buræquete 25.06.2019 07:01

@buræquete Я могу рассмотреть это, но нет ли простого способа, когда поиск может игнорировать папки? (у меня несколько модулей)

user7294900 25.06.2019 07:03

Чтобы найти неиспользуемые методы все, вам всегда понадобится какой-то инструмент, будь то в Intellij или Eclipse, но ни один из этих инструментов не имеет такой функции игнорирования пакетов. Лучше всего просто использовать этот инструмент и удалить тестовые пакеты, чтобы найти все неиспользуемые методы В самом деле.

buræquete 25.06.2019 07:10

Может быть, вы можете просто увеличить уровень предупреждения вашего неиспользуемого кода в Настройки компилятора Java, чтобы после сборки вы могли получать неиспользуемые методы как ошибки или просто предупреждения? После того, как вы удалите свои тесты ofc. Лучше, чем получить какой-то глупый инструмент.

buræquete 25.06.2019 07:19

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

AxelH 25.06.2019 07:45

@AxelH Вы работаете с проектом для тестов?

user7294900 25.06.2019 07:48

Я никогда не использовал такой подход... если это ваш вопрос.

AxelH 25.06.2019 07:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
7
1 177
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

Я ищу что-то похожее на функцию Intellij, которая показывает, что неиспользуемые функции исчезают.

fuat 29.07.2021 11:25

Я думаю, что более прямым ответом будет использование DeadCodeDetector, см.: https://github.com/evernat/dead-code-detector/wiki

Сначала запустите его, включая классы src/main и src/test, и выведите в журнал XML. Во-вторых, запустите его, включая ТОЛЬКО ваш src/main, и выведите его во второй журнал XML.

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

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

Другие вопросы по теме