2011-11-12 11 views
1

私はそこSystem.out.println("something");を置けば、それは「何か」をプリントアウトしてしまうためそれは、assertTrue(b_exception);の問題ですので、もしわからないのJUnitに精通していないです...感謝!誰でもこの疑似コードの何が問題なのか教えていただけますか?

ロジックに集中、それは擬似コードであることに注意してください。

b_exception = false; 
try{ 
    somethingThrowError(); 
}catch(Error e){ 
    b_exception = true; 
} 
assertTrue(b_exception); 
+1

予期しないことは何ですか? – suat

+0

私はあなたが何を求めているのか理解していません... psudoコードに何も問題はありませんか?あなたはb_exceptionが常にfalseであると言っていますか? – Matt

+2

あなたが書いたコードでは、ブール値はfalseに設定されています。例外をスローするものを試してみると、ブール値をtrueに設定します。最後に、assertステートメントはそれが正しいと判断して実行を続けますこのブロック。あなたは何を期待していますか? –

答えて

2

私はあなたがそれはあなたの期待を満たすために失敗する方法を述べていないため、問題はあなたのコードであるかわからないが、例外がスローされていることをテストするための正しいイディオムは、JUnitの4の注釈を使用することです:

@Test(expected=SpecificError.class) 
public void testError(){ 
    somethingThrowError(); 
} 
+0

それはちょうど擬似コードであり、私の友人は、テストの質問のような何かが間違っていると私に言った...しかし、私は本当にその部分コードの論理的な欠陥を見つけることができませんでした。ですから...ロジックの観点から、コードの何が間違っているか知っていれば教えてください。ありがとう!! – Kevin

2

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

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

またとして特定の例外を使用し、Errorをキャッチすることは悪い考えであることに注意してくださいあなたはできる。

UPDATE:@Michael Borgwardtの答えはさらに良い実際にですが、場合にのみ、あなたのテストでは、単一の行(投げることができる何もない)を除いては何もありません。また@Test(expectedあなたは余分な例外メッセージアサーションを行うことを可能にする(しかし、あなたがすべき?)しない

+0

実際には、失敗(以降、このコードが壊れているので、悪い考えですが)また、単にAssertionErrorがスローを... –

+0

@MichaelBorgwardt:うわー、良いキャッチ、修正、ありがとう!最後に「エラー」を明示的に使用したのはいつか思い出せません... –

1

ないあなたはそのコードが間違っていると思うものを確認してください。
assertTrueは常にますSystem.out.printlnとして、実行されます。
それ - assertTrue - 引数がtrueある場合、引数はtrueでない場合はエラーを通知、または「テストに合格」します。
何が起きているのかを確認するには、System.out.println("b_exception = " + b_exception);を使用する必要があります。

関連する問題