2010-11-11 31 views
2
testLogicalDoc = new LogicalDocumentImpl(-4); 
assertTrue(testLogicalDoc==null); 

在我上面的代碼中,我有一個斷言條件,我想確保我不會創建負大小的對象。它是一個stringBuilder,它的封面下面會拋出NegativeArrayBoundsException,其大小小於零。但是我的junit測試在這裏失敗了。我不知道任何其他方式確保一個對象不是以負尺寸創建的。 關於如何測試它的任何想法?或者它應該是一個Junit測試?在下面的例子中聲明

非常感謝,
-pan
編輯:

@Test(expected=NegativeArraySizeException.class) 
public void testCreate4b() 
    { 
      LogicalDocumentImpl testLogicalDoc = new LogicalDocumentImpl(-4); 

    } 

我捕捉異常的LogicalDocumentImpl類,但仍這個測試失敗,並斷言錯誤,但只有當我做了嘗試捕捉成功在斷言錯誤..爲什麼這樣?

回答

1

捕捉Asse田和失敗否則:

try { 
    LogicalDocumentImpl testLogicalDoc = new LogicalDocumentImpl(-4); 
    fail("should throw"); 
} 
    catch (AssertionError e) { 
} 
+0

'fail'方法在JUnit 3中拋出'AssertionError'(或名爲'AssertionFailedError'的子類),所以這實際上並不會做它看起來 – NamshubWriter 2010-11-12 14:09:26

5

,如果你扔​​測試用例可以檢查這樣

@Test(expected= NegativeArrayBoundsException.class) 

這意味着你的測試應該拋出異常​​。

或者您可以使用fail('should never come here for negative values..')

testLogicalDoc = new LogicalDocumentImpl(-4); 
fail('should never come here for negative values..'); 
1

通常JUnit測試用例是爲了測試,在某些情況下,你的代碼的行爲是你所期望的。因此,對於這種情況,您希望引發異常。

望着JUnit的常見問題解答(http://junit.sourceforge.net/doc/faq/faq.htm#tests_7)要使用類似以下內容:

@Test(expected=NegativeArrayBoundsException.class) 
+0

這將工作,如果我在我的方法中創建對象的try/catch子句?或者我需要做一個投擲?? ?? – Pan 2010-11-11 17:45:43