Как искать тесты JUnit и TestNG без утверждений? - PullRequest
1 голос
/ 14 июля 2011

Мне удалось выяснить, как искать неиспользуемые тесты.Кто-нибудь знает, как я могу выяснить, если тест, который был запущен, не имеет утверждения?

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Я думаю, у вас есть два варианта: во время выполнения или с помощью статического анализа.

Во время выполнения

Вы сможете подключиться к своим тестам во время выполнения, используя RunListener JUnit (TestNG имеет аналогичную абстракцию), но как вы можете определить, когда сделаны утверждения? Не просто, но это было бы возможно при использовании Java Agent . Вы можете использовать java-агент и библиотеку, которая выполняет манипуляции с байт-кодом, чтобы изменить поведение методов «утверждения» при их загрузке в JVM. Ваши измененные методы должны будут вызывать ваши RunListeners, а затем делать их утверждения как обычные. Вы должны быть в состоянии перечислить каждый метод, который считается «утверждением» (junit? Testng? Hamcrest? И т. Д.?). Уф! Я делал все это в прошлом, это было довольно неудобно, но это работает.

Статический анализ

В вашем случае статический анализ может показаться лучшим выбором. Вы можете отсканировать classpath для всех аннотаций @Test (или эквивалент TestNG) и проверить, какие из них вызывают метод, имя которого начинается с «assert». Я использовал javaparser , чтобы сделать что-то похожее на это, и это работает довольно хорошо.

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

1 голос
/ 17 августа 2012

Более простым подходом могли быть JUnit и TestNG, поддерживающие счетчик утверждений, который может печатать не только количество тестов, но и утверждения, используемые в методах тестирования.

Я написал оболочку для класса Assert, которая переопределяет всеметоды и счетчик ..

Вы также можете попробовать использовать структурированный поиск IntelliJ

С уважением, Nagendra

0 голосов
/ 14 июля 2011

Я бы сказал, что лучшим вариантом будет поиск по регулярному выражению или какой-то статический анализ. В любом случае, он должен иметь возможность идентифицировать методы тестирования и определить, содержат ли они утверждение, где утверждение - это какой-то вызов assert *, фиктивная проверка и / или предложение «ожидаемое исключение», как минимум. Все они составляют некое «утверждение».

...