6

私は1Z0-851OraclaJava SE 1.6認定を取得するために勉強していますが、次の質問がありました。

テストからの質問

私は最初の選択肢を正しいものとしてマークし、失敗しました!「すべてのassertステートメントが適切に使用されている」と答えは、最初のステートメントがassert(x > 0);正しくないことを示しています。質問はなぜですか?

4

4 に答える 4

4

正解はこれです

アサーションの適切および不適切な使用

通常は到達しないと予想される任意の場所にアサーションを配置できます。アサーションは、プライベートメソッドに渡されたパラメーターを検証するために使用できます。ただし、パブリックメソッドは、アサーションが有効かどうかに関係なく引数をチェックする必要があるため、パブリックメソッドに渡されるパラメーターの検証にアサーションを使用しないでください。ただし、パブリックメソッドと非パブリックメソッドの両方でアサーションを使用して事後条件をテストできます。また、アサーションはプログラムの状態を変更してはなりません。

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

于 2013-02-25T19:18:59.520 に答える
3

12行目は冗長です。

これを削除すると、15行目のアサーションは次の場合をカバーします。x <= 0

正直なところ、奇妙な言葉の質問ですが、私が見ることができるのはそれだけです。適切な意味がわかりません

于 2013-02-25T17:45:57.603 に答える
1

最初のassertステートメント(その位置のために「前提条件」として解釈される必要があります)だけを読んだ場合、関数が正のint値で正しく機能する必要があることを意味しますが、これは正しくありません。したがって、その主張は誤解を招く可能性があります。

于 2013-02-25T17:44:10.923 に答える
0

から始めてgo2、アサーションを理解するのは簡単です。
このメソッドは何もしません、それはあなたの期待を主張するだけです、それx < 0

go一方、このメソッドには。がありswitchます。プログラムがこの句に該当することを絶対に期待しない場合、
つまり通常状況では、sの1つが正しくなければならない場合はassert false、この句を適用することをおdefault勧めします。case

の唯一のケースは正確switchにであると期待xしています。 2
したがって、要約すると、最初のアサーションが言うように、あなたはxより大きくなることを期待していません。したがって、アサーションは適切に使用されません。0x2

ただし、Jeffが指摘したように、にはcaseがありませんbreak。これは、defaultが常に実行され、すべてのシナリオでにつながることを意味しassert falseます。

結論:このgo方法は常にエラーになり、assert false適切に使用されますassert x > 0が、まったく正しくありません。

于 2013-02-25T17:46:18.270 に答える