13

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

@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

4 回答 4

11

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

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

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

第二种情况使用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

assert关于 java关键字 的一些信息: assert

于 2013-05-22T11:16:14.590 回答