2016-07-12 40 views
1

Unser Projekt hat statische Analyse aktiviert, und wenn es um das Testen geht, beginnen wir uns Sorgen zu machen, ob wir auf NULL-Prüfung testen sollen oder was bereits durch die statische Analyse getestet wurde.Ob NULL-Check-in-Testfälle durchgeführt werden sollen, wenn die statische Analyse aktiviert ist?

Sollte ich noch für diese Sachen testen?

z. Für Methode:

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

Sollten wir haben Test dieses:

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

Dann testen für die NPE geworfen, wenn null übergeben wird?

EDIT: Wir verwenden Findbugs, aber ich denke, das Problem gilt auch für andere statische Code-Analyse-Tools.

+0

Welcher statische Analysator wird verwendet? Mahnt es, wenn es nicht beweisen kann, dass das Ergebnis den durch die Annotation festgelegten Vertrag erfüllt (das ist in Ordnung, hat aber möglicherweise falsche Positive), oder nur wenn es beweisen kann, dass das Ergebnis den Vertrag definitiv nicht erfüllen kann (nicht ok, wie es ist) kann falsche Negative haben)? – HairyFotr

+0

Es ist Findbugs. Ich habe das Tag hinzugefügt. Allerdings kenne ich nicht die Einzelheiten über seinen Mechanismus, aber ich denke, es ist der erste. @HairyFotr – glee8e

Antwort

0

Die statischen Analysatoren helfen Ihnen, die Codepfade zu finden, die wahrscheinlich NPE auslösen. FindBugs macht die Analyse meist Bereich auf individuelle Methode.

Wenn Sie Ihren Parameter mit @Nonnull für häufig verwendete API annotieren, helfen Sie dem Analysator definitiv (FindBugs).

Testen für NPE scheint keinen Wert zu bringen. Ich würde Wert sehen, wenn dies eine öffentliche API (wichtige API) wäre und der Nullzeiger richtig gehandhabt wird (d. H. Mit IllegalArgumentException). Das ist natürlich eine Meinung. Es gibt keine Wahrheit über das Testniveau.