13

次の 2 つのコード ブロックの違いは何ですか?

@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 のキーワード (Java 1.4 で導入) であることは理解しています。これら2つに他に違いはありますか?例:仕事、パフォーマンスなど

4

4 に答える 4

11

最初のケースは、テスト フレームワークのAssertクラスを使用しており、TestNG がインテリジェントな方法でエラーを報告するため、適切な方法です。

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

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

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

于 2013-05-22T11:13:15.753 に答える
3

パフォーマンスについて話す:

assert object!=null;単一の Java ステートメントですがAssert.assertNotNull(object)、TestNG の複数の関数を呼び出すことになるため、wrt のパフォーマンスassert object!=null; がわずかに向上します。

于 2013-05-22T12:19:19.240 に答える
3

はい、あります: -ea フラグを使用して assert キーワードを有効にする必要があります。

 java -ea MyClass

そのため、コードを変更せずにアサートをオンまたはオフにすることができます。

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

于 2013-05-22T11:13:17.863 に答える
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

assertJava のキーワード に関する情報: assert

于 2013-05-22T11:16:14.590 に答える