2013-05-22 15 views
7

次の2つのコードブロックの違いは何ですか?アサートオブジェクト!= nullとAssert.assertNotNull(オブジェクト)の違いは何ですか?

@Test 
public void getObjectTest() throws Exception { 
    Object object; 
    //Some code 
    Assert.assertNotNull(object); 
} 

@Test 
public void getObjectTest() throws Exception { 
    Object object; 
    //Some code 
    assert object!=null; 
} 

私はAssert.AssertNotNullはTestNGのとassertからの関数呼び出しであることを理解しないが(Javaの1.4で導入された)は、Javaのキーワードです。これらの2つに他の違いはありますか?例えばパフォーマンス、等々

答えて

7

最初のケースでは、テストフレームワークのAssertクラスが使用されています。これはTestNGがエラーを知的な方法で報告するためです。

また、テストに独自のメッセージを追加することができます

Assert.assertNotNull(object, "This object should not be null"); 

後者の場合はassertキーワードを使用しています - それはあなたの失敗を与えるだろうが、スタックトレースは、または一目で理解できない場合があります。また、アサーションが有効になっていない可能性があることに注意する必要があります。

3

はいある:

java -ea MyClass 

アサートは、そのコードを変更することなく、オン・オフすることができるようにassertキーワードは、-eaフラグを使用して有効にする必要があります。

アサートクラスは常に代わりに機能します。したがって、テストを行っている場合は、Assertクラスを使用し、assertキーワードは使用しないでください。これは、すべてのテストが合格するというアイデアを与えるかもしれませんが、実際には何もアサートしません。私の10年以上のコーディングでは、誰もJetbrains以外のアサーションを有効にすることはなかったので、代わりにAssertを使用してください。それ以上は、Hamcrestを使用してください。

+0

これはTestNGプラットフォーム内で実行されています。 TestNGはアサート文を有効にします。あなたの情報がどこに届いているのか分かりません。 –

+0

あなたが正しいです、私はこれを修正するために私の答えを更新しました。ありがとう! –

0

基本的にはassertキーワードの欠如です。 これはTestNGのからのソースです:

static public void assertNotNull(Object object) { 
    assertNotNull(object, null); 
} 

static public void assertNotNull(Object object, String message) { 
    assertTrue(object != null, message); 
} 

はOPはTestNGのタグを使用することに注意してください!

これはJUnitのAssertではありません!

Javaのassertキーワードに関するいくつかの情報:assert

2

は、パフォーマンスの話:

assert object!=null;は、単一のJava文ですがAssert.assertNotNull(object)はTestNGのの複数の機能を呼び出すことになり、w.r.t.ので、パフォーマンスassert object!=null;はやや良いでしょう。

+0

少し気分はどういう意味ですか?いくつか番号を教えてください。 – Senstive

+0

わずかに私は 'assert object!= null;'時間は短くなりますが、差はミリ秒単位で表されます – Raheel

関連する問題