2013-05-22 528 views
7

以下兩段代碼有什麼區別?assert object!= null和Assert.assertNotNull(object)之間有什麼區別?

@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中引入)。這兩者有什麼不同嗎?例如工作,性能等

回答

7

那麼第一個案例使用您的測試框架中的Assert類,並且是正確的路要走,因爲TestNG會以智能的方式報告錯誤。

您也可以添加自己的信息給檢驗:

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

第二種情況使用assert關鍵字 - 它會給你一個失敗,但堆棧跟蹤可能會或可能不會一眼就可以理解的。您還需要知道斷言可能無法啓用。

3

是的,有:assert關鍵字需要使用-ea標誌啓用,像

java -ea MyClass 

斷言可以爲此被打開和關閉,而無需更改代碼。

Assert類將始終工作。因此,如果您正在進行測試,請使用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

相關問題