以下两段代码有什么区别?
@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中引入)。这两者有其他差异吗?例如工作,表现等
答案 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