Java JUnit4和异常处理
由于存在无法访问的catch块,以下代码无法编译 我想编写“tues”函数,并在许多其他单元测试函数中调用它 这可能吗?如何实施Java JUnit4和异常处理,java,junit,Java,Junit,由于存在无法访问的catch块,以下代码无法编译 我想编写“tues”函数,并在许多其他单元测试函数中调用它 这可能吗?如何实施 private void catchException(boolean condition) { try { assertTrue(condition); } catch (SomeException e) { fail("exception
private void catchException(boolean condition) {
try
{
assertTrue(condition);
}
catch (SomeException e)
{
fail("exception = " + e.getMessage());
}
}
谢谢 通过
Exception
修改SomeException
将导致代码编译。您的代码的问题是assertTrue
不会抛出SomeException
,如果您用抛出的函数替换它,它将编译。我不完全确定您在这里要问什么,但是你发布的代码有几处错误
如果try中的代码可能引发与捕获的异常类型相同的异常,则只能为选中的异常创建catch块。由于选中的异常必须在方法的throws子句中声明,因此可以检查正在调用的任何方法是否会抛出正在捕获的异常类型。从JUnit文档中的:
您可以看到它不会抛出任何已检查的异常
此外,在JUnit测试中的catch块中调用
fail()
,实际上并不需要。如果抛出未捕获的异常,单元测试将自动失败。只需将抛出的异常
添加到您的测试签名中,如果抛出异常,测试将失败。在测试方法中捕获异常不需要失败:
public Object methodUnderTest() throws SomeException {
...
}
@Test
public void testMethod() throws SomeException() {
Object obj = methodUnderTest();
assert...
}
如果
methodUnderTest()
引发了SomeException
,testMethod()
将失败。实际上并不清楚用代码实现什么。如果您希望在JUnit激发的异常中有一个格式良好的消息,如果您的断言失败,那么考虑以这种方式编写:
assertTrue("Condition should hold because....", conditionToCheck);
这样,如果检查失败,jUnit将打印您提供的消息。我强烈推荐这个,特别是如果你有很多测试,因为它
- 帮助您快速识别问题
- 帮助您的团队成员理解您的断言的目的
- 显然我的问题不清楚
我有很多单元测试,所有方法都会抛出相同的异常,但错误消息不同。“SomeException”是异常,我必须捕获并读取其中的错误消息
我想要实现的是编写一个方法,它将是所有单元测试的通用方法,并且可以在其中打印错误消息
现在单元测试是这样的
public void test_something()
{
try
{
assertTrue(bw.doSomething("test"));
}
catch (SomeException e)
{
fail("exception = " + e.getReason());
}
}
public void test_something1()
{
IBroadworks bw = getSomehting1();
try
{
assertTrue(bw.doSomething1("test1"));
}
catch (SomeException e)
{
fail("exception = " + e.getReason());
}
}
...
所以下面的代码在所有单元测试中重复,这是不正确的
...
try{
assertTrue(condition);
}
catch (SomeException e)
{
fail("exception = " + e.getReason());
}
...
你到底想达到什么目的?不,不是现在的形式。你想完成什么?什么是“星期二”功能?这与无法到达的捕捉块有什么关系?我一点也不懂这个问题。谢谢你的回答。我知道我应该编写checked exception int catch块,这就是为什么该函数不能工作的原因。我调用fail(),因为如果我不这样做,单元测试通过。@coban22,不,未捕获的异常将导致JUnit测试失败:只需将它添加到测试方法的
throws
子句中,这样代码就可以编译了。
...
try{
assertTrue(condition);
}
catch (SomeException e)
{
fail("exception = " + e.getReason());
}
...