assert object!= null和Assert.assertNotNull(object)之间有什么区别?

时间:2013-05-22 11:10:37

标签: java testing testng

以下两段代码有什么区别?

@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中引入)。这两者有其他差异吗?例如工作,表现等

4 个答案:

答案 0 :(得分:10)

第一种情况是使用测试框架中的Assert类,这是正确的方法,因为TestNG将以智能方式报告错误。

您还可以将自己的消息添加到测试中:

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

第二种情况使用assert关键字 - 它会使您失败,但堆栈跟踪可能一眼就能理解,也可能不理解。您还需要注意,可能无法启用断言。

答案 1 :(得分:3)

是的,有:需要使用-ea标志启用assert关键字,如

 java -ea MyClass

断言可以在不对代码进行任何更改的情况下打开和关闭。

Assert类总是可以工作。因此,如果您正在进行测试,请使用Assert类,而不是assert关键字。这可能会让您了解所有测试都已通过,而实际上它们并未断言任何内容。在我10多年的编码中,我从未见过有人启用除Jetbrains之外的断言,因此请使用Assert。或者更好的是,使用Hamcrest

答案 2 :(得分:3)

谈论绩效:

assert object!=null;是一个单独的java语句,但Assert.assertNotNull(object)将导致调用TestNG的多个函数,因此w.r.t.性能assert object!=null;稍微好一些。

答案 3 :(得分: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