2013-02-25 6 views
6

私は1Z0-851 OraclaのJava SE 1.6の認定のために勉強していると私はこの質問を見た:Javaのassert文の使用状況、試験の認定1Z0-851

Question from test

私は正しいものとして最初の選択肢をマークし、失敗! "すべてのアサート文は適切に使用されています"という答えは、最初の1つがassert(x > 0);が間違っていると答えています。

+1

用語は、したがって、混乱、非常に主観的です。彼らはその質問を明確にすべきです。 –

+0

またこれを見てください(http://stackoverflow.com/questions/1957645/when-to-use-assertion-vs-exception) – Amarnath

+1

もしそれらが少量であったコードサンプルを使用したなら、意味の – asteri

答えて

4

正解はあなたが正常に達することを期待していない任意の位置にアサーションを配置することができアサーション

のこの

適切かつ不適切な使用です。 アサーションを使用して、プライベートメソッドに渡されるパラメータを検証することができます。ただし、 パブリックメソッドは、アサーションが有効かどうかにかかわらず引数をチェックする必要があるため、 アサーションをパブリックメソッドに渡すパラメータの検証に使用しないでください。ただし、公開および非公開のアサーションを使用して後処理をテストすることができます メソッド。また、アサーションはプログラムの状態を変更するものではありません。

のSrc: "適切に使用" http://www.freejavaguide.com/java-scjp-part1.pdf

+0

gooooood man !!!最後に正しい答え!!! – thiagoh

+0

+1ニースは、それを知っていませんでした。個人的には単体テストでアサーションを使用しています。 – cowls

1

位置のために "前提条件"と解釈されるべき最初のassert文を読むと、関数は正のint値で正しく動作するはずであり、これは真ではありません。したがって、その主張は誤解を招きます。

+0

この関数は、xの値に対しては機能しません。どちらかが負の数で、最初のものが失敗したか、または「偽のものがアサートされた」ものです。 – asteri

3

12行目は冗長です。

あなたはそれを削除した場合、ライン15上の主張は、その奇妙な表現の質問正直に言うとx <= 0

ケースをカバーしますが、それは私が見ることができるすべてです。私は適切な意味が分からない

0

で始まるgo2から始めると、アサーションが分かりやすくなります。
このメソッドは何もしません、それはあなたの期待をアサートします、そのx < 0。一方、goの方法はswitchである。通常の状況下で
あなたは絶対にプログラムがこの条項に該当すると期待していない場合には、default句にassert falseに良い習慣です、すなわちcase Sの一つが正しいことがあります。 switch

のみの場合は、xが正確2ことを期待しています。
つまり、が0より大きくなるとは思わないでしょう。最初のアサーションで言うように、x2になると思います。したがって、アサーションは適切に使用されません。 Jeffに述べたように

しかし、casedefaultが常にassert falseに、すべてのシナリオでは、リーディング、実行されることを意味しないbreakを有していません。

結論:assert x > 0は全く正しくないながらgo方法は常に、正しく使用assert falseを行う、エラーが発生しなければなりません。

+1

'case 2'に対応する' break 'がないことを除けば、常に 'assert false'に落ちます。 – asteri

+0

きれいに見つかった。私は自動的に「中断」を想定しました。 – afsantos

+0

私も最初にそれを読んだとき。だから自分の答えを削除しなければならなかったのです。ハハ – asteri

関連する問題