2016-07-12 10 views
1

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

Должен ли я по-прежнему испытывать эти вещи?

E.g. Для метода:

@RegEx("bla.*bla") 
public static String bar(@Nonnull Foo par1) 

Если мы имеем испытание это:

assertTrue(Pattern.matches(XXX.bar(someFoo))); 

Затем проверить на NPE брошенной, если нуль передается в?

EDIT: Мы используем Findbugs, но я думаю, что проблема также относится к другим инструментам статического кода analsis.

+0

Какой статический анализатор используется? Поднимает ли оно предупреждение, если оно не может доказать, что результат удовлетворяет контракту, заданному аннотацией (это нормально, но имеет возможные ложные срабатывания) или только тогда, когда он может доказать, что результат определенно не может удовлетворить контракт (не нормально, поскольку он могут иметь ложные отрицания)? – HairyFotr

+0

Это Findbugs. Я добавлю тег. Однако я не знаю подробностей о его мекантизме. Но я думаю, что это первый. @HairyFotr – glee8e

ответ

0

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

Если вы комментируете свой параметр @Nonnull для обычно используемого API, вы определенно помогаете анализатору (FindBugs).

Тестирование на NPE, похоже, не приносит никакой пользы. Я бы увидел значение, если это публичный API (важный API), а нулевой указатель правильно обрабатывается (то есть: IllegalArgumentException). Это, очевидно, мнение. Нет никакой истины относительно уровня тестирования.