誰でもこの疑似コードの何が間違っているのか教えていただけますか?

私はJUnitに慣れていないので、 System.out.println( "something"); を配置すると、それが assertTrue(b_exception); そこには、「何か」が印刷されます...ありがとう!!

それは擬似コードであり、ロジックに焦点を当てています。

b_exception = false;
try{
   somethingThrowError();
}catch(Error e){
   b_exception =  true;
}
assertTrue(b_exception);
1
b_exception はローカル変数ですか、それとも somethingThrowError がエラーを投げずにtrueに設定できるのでしょうか?なぜエラーで、 Throwable ではないのですか? somethingThrowErrorエラーの代わりに Exception をスローすると、アサーションを合格または失敗させますか?
追加された 著者 Mike Samuel,
私はあなたが何を求めているのか理解していません... psudoコードに何も問題はありませんか?あなたはb_exceptionが常にfalseであると言っていますか?
追加された 著者 Matt,
あなたが書いたコードでは、ブール値はfalseに設定されています。例外をスローする何かを試してみると、ブール値をtrueに設定します。最後にassertステートメントがtrueであることをチェックし、ブロック。あなたは何を期待していますか?
追加された 著者 Andrew Stubbs,
予期しないことは何ですか?
追加された 著者 suat,
誰かがこの質問について私に尋ねる、それは私が持っているものすべてであり、間違いがあると言いましたが、私はその論理に何か間違っているとは見えませんでした。覚えておいてください、それはちょうど擬似コードであり、そのロジックには間違ったものが1つあります...それが私が得た唯一のヒットです。あなたが答えを知っていれば教えてください。ありがとう!!
追加された 著者 Kevin,

3 答え

私はあなたがこれを探していると推測することができます:

try{
  somethingThrowError();
  fail("Exception expected");
}catch(AsSpecificAsPossibleException e){
  //should happen, OK
  //optionally assert exception message, etc.
}

また、エラーをキャッチすることは悪い考えであり、できる限り特殊な例外として使用することに注意してください。

更新: @Michael Borgwardt の答えは、実際にはさらに優れていますが、テストでは1行だけを除いては何もありません。また、 @Test(expected は余分な例外メッセージアサーションを実行することを許可しません。

2
追加された
@MichaelBorgwardt:うわー、良いキャッチ、訂正、ありがとう!私が Error を明示的に使用したのは、いつ覚えていないのですか?
追加された 著者 Tomasz Nurkiewicz,
実際には、このコードが壊れているということはとても悪い考えです。なぜなら、fail()は単にAssertionErrorをスローするからです。
追加された 著者 Michael Borgwardt,

私はあなたのコードに何が問題であるのか分からない。なぜなら、あなたの期待をどのように達成できないのかを述べていないからですが、例外がスローされることをテストするための正しいイディオムはJUnit 4の注釈を使うことです。

@Test(expected=SpecificError.class)
public void testError(){
   somethingThrowError();
}
2
追加された
それはちょうど擬似コードであり、私の友人はテストの質問のような何かが間違っていると私に言った...しかし、私は本当にその部分コードの論理的な欠陥を見つけることができませんでした。ですから...ロジックの観点から、コードの何が間違っているか知っていれば教えてください。ありがとう!!
追加された 著者 Kevin,

そのコードに何が悪いと思われるかわからない

System.out.println のように、 assertTrue は常に実行されます。
引数が true でない場合はエラーを通知し、引数が true の場合は "testを渡します"。 assertTrue br> System.out.println( "b_exception =" + b_exception); を使用して、何が起きているのかを確認する必要があります。

1
追加された