在下面的例子中断言

时间:2010-11-11 17:17:23

标签: java junit assert

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类中捕获异常,但是这个测试仍然失败并出现断言错误,但只有在我尝试捕获断言错误时才成功..为什么会这样?

3 个答案:

答案 0 :(得分:5)

如果您正在投掷NegativeArrayBoundsException,您的测试用例可以像这样检查

@Test(expected= NegativeArrayBoundsException.class)

这意味着您的测试应抛出异常NegativeArrayBoundsException

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

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

答案 1 :(得分:1)

通常,Junit测试用例旨在测试代码在某些情况下的行为是否符合您的预期。因此,对于这种情况,您希望抛出异常。

查看JUnit常见问题解答(http://junit.sourceforge.net/doc/faq/faq.htm#tests_7),您希望使用以下内容:

@Test(expected=NegativeArrayBoundsException.class)

答案 2 :(得分:1)

Catch AssertionError,否则失败:

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