2013-02-25 4 views
6

Ich studiere für 1Z0-851 Oracla Java SE 1.6 Zertifizierung und ich sah diese Frage:Java Assert-Anweisung Verwendung, Exam Certification 1Z0-851

Question from test

ich die erste Alternative als die richtige markiert und gescheitert! "Alle Behauptungen werden angemessen verwendet" und die Antwort sagt, dass die erste assert(x > 0); falsch ist .. die Frage ist warum?

+1

Der Begriff "verwendet, in geeigneter Weise" ist sehr subjektiv, daher die Verwirrung. Sie sollten diese Frage klären. –

+0

Schauen Sie sich auch diese [Antwort] (http://stackoverflow.com/questions/1957645/when-to-use-assertion-vs-exception) – Amarnath

+1

Es würde wirklich helfen, wenn sie ein Codebeispiel verwendet, das nur eine kleine Menge gemacht der Sinne. – asteri

Antwort

4

Die richtige Antwort ist diese

angemessene und unangemessene Verwendung von Behauptungen

Sie eine Assertion an einer beliebigen Stelle platzieren können, die Sie nicht erwarten, normalerweise erreicht werden. Behauptungen können verwendet werden, um die an eine private Methode übergebenen Parameter zu validieren. Assertionen sollten jedoch nicht zum Überprüfen von Parametern verwendet werden, die an öffentliche Methoden übergeben werden, da eine öffentliche -Methode ihre Argumente überprüfen muss, unabhängig davon, ob Assertions aktiviert sind oder nicht. Sie können jedoch Nachbedingungen mit Assertionen sowohl in öffentlichen als auch in nicht öffentlichen -Methoden testen. Außerdem sollten Assertionen den Status eines Programms in keiner Weise ändern.

Src: http://www.freejavaguide.com/java-scjp-part1.pdf

+0

gooooood mann !!! Endlich die richtige Antwort !!! – thiagoh

+0

+1 Schön, wusste das nicht. Obwohl ich persönlich immer nur Behauptungen in Unit Tests verwende ..! – cowls

1

Wenn Sie nur die erste assert-Anweisung lesen, die aufgrund ihrer Position als "precondition" interpretiert werden soll, bedeutet dies, dass die Funktion mit jedem positiven int-Wert ordnungsgemäß funktionieren sollte, was nicht zutrifft. Diese Behauptung ist daher irreführend.

+0

Die Funktion funktioniert nicht für irgendwelche Werte von x. Entweder ist es eine negative Zahl und versagt die erste, oder sie behauptet falsch. – asteri

3

Zeile 12 ist redundant.

, wenn Sie es entfernen, die Behauptung auf Linie 15 den Fall abzudecken, in denen x <= 0

ehrlich sein eine seltsam formulierte Frage zu sein, aber das ist alles, was ich sehen kann. Ich bin mir nicht sicher, was mit

0

von go2 verstanden wird, ist es leicht, die Behauptung zu verstehen.
Die Methode tut nichts, es behauptet nur Ihre Erwartung, dass x < 0.

Die go Methode, auf der anderen Seite, hat eine switch.
Es ist gute Praxis zu assert false auf der default Klausel, wenn Sie absolut nicht Ihr Programm erwarten unter dieser Klausel fallen, dh, die unter normalen Umständen eine der case s hat, korrekt zu sein.

Der einzige Fall, auf den switch erwartet xgenau2 zu sein.
Also, um zusammenzufassen, erwarten Sie nicht x zu größer als 0, wie die erste Behauptung sagt, erwarten Sie x zu 2 und nichts anderes. Daher wird die Assertion nicht angemessen verwendet.

jedoch als Jeff erwähnt, hat die case keine break, die die default bedeutet, dass immer dann ausgeführt werden, was in jedem Szenario zu assert false.

Fazit: Die go Methode sollte immer zu einem Fehler, so dass assert false richtig eingesetzt, während assert x > 0 überhaupt nicht korrekt ist.

+1

Mit der Ausnahme, dass die "case 2" keine entsprechende "break" hat, was bedeutet, dass sie immer auch zu "assert false" durchfällt. – asteri

+0

Schön entdeckt. Ich nahm automatisch die "Pause" an. – afsantos

+0

Ich auch, als ich es zuerst las. Deshalb musste ich meine eigene Antwort löschen. Haha – asteri