2011-11-12 71 views
1

我对JUnit并不熟悉,所以不确定这是否是assertTrue(b_exception);的问题,因为如果我在此处放置System.out.println("something");,它会打印出“某事”...谢谢!任何人都可以告诉我这个伪代码有什么问题吗?

请注意,它是伪代码,专注于逻辑。

b_exception = false; 
try{ 
    somethingThrowError(); 
}catch(Error e){ 
    b_exception = true; 
} 
assertTrue(b_exception); 
+1

什么是意想不到的事情? – suat

+0

我不明白你在问什么...... psudo代码没有错?你是否说b_exception一直是错误的? – Matt

+2

用你写的代码,你的布尔值被设置为false,你尝试引发异常的东西(我假设),然后捕获它将布尔值设置为true,最后你的assert语句检查它是否为真,并且执行将继续过去这块。你期望发生什么? –

回答

2

我不知道是什么问题,你的代码,因为你还没有说,它是如何失败的,以满足您的期望,但是出于测试正确的成语,一个异常被抛出是使用JUnit 4的注解:

@Test(expected=SpecificError.class) 
public void testError(){ 
    somethingThrowError(); 
} 
+0

这只是伪代码,我的朋友告诉我有什么问题,就像一个测试问题......但我真的找不到该代码的任何逻辑错误。所以......请让我知道,如果你知道代码的错误,从逻辑的角度来看。谢谢!! – Kevin

2

我只能猜测,您正在寻找这样的:

try{ 
    somethingThrowError(); 
    fail("Exception expected"); 
}catch(AsSpecificAsPossibleException e){ 
    //should happen, OK 
    //optionally assert exception message, etc. 
} 

还要注意的是醒目的Error是一个坏主意,用具体的例外您可以。

更新:@Michael Borgwardt的答案实际上甚至更好,但只有在测试中除了单行之外没有其他东西(没有其他可抛出的东西)。 @Test(expected不允许你执行额外的异常信息断言(但你应该?)

+0

其实这是一个很糟糕的主意,这段代码被破坏了,因为fail()也只是抛出了一个AssertionError ... –

+0

@MichaelBorgwardt:哇,很好,赶紧纠正,谢谢!我不记得是什么时候我最后一次明确地使用了'Error' ...... –

1

不知道你认为是什么错误的代码。
assertTrue将一直执行,System.out.println也一样。
它 - assertTrue - 如果参数不是true,将发出错误信号,如果参数是true,则会发出“通过测试”。
也许你应该使用System.out.println("b_exception = " + b_exception);看看发生了什么。

相关问题