JUnit4和异常处理

时间:2010-08-27 12:58:20

标签: java junit

以下代码无法编译,因为无法访问的catch块。

我想写“tues”函数并在许多其他单元测试函数中调用它。

这可能吗?如何实现?

private void catchException(boolean condition) {
        try
        {
            assertTrue(condition);
        }
        catch (SomeException e)
        {
            fail("exception = " + e.getMessage());
        }
}

谢谢!

7 个答案:

答案 0 :(得分:4)

无需在测试方法中捕获异常以使其失败:

public Object methodUnderTest() throws SomeException {
    ...
}

@Test
public void testMethod() throws SomeException() {
      Object obj = methodUnderTest();
      assert...
}

如果SomeException引发methodUnderTest(),则testMethod()将失败。

答案 1 :(得分:2)

你的代码存在的问题是assertTrue不会抛出SomeException,如果用它替换它的函数,它会编译。

答案 2 :(得分:2)

我不完全确定你在这里问的是什么,但你发布的代码有些问题。

如果try中的代码可能会抛出您正在捕获的相同类型的异常,则只能为已检查的异常设置catch块。由于必须在方法的throws子句中声明已检查的异常,因此可以检查是否正在调用的任何方法抛出正在捕获的异常类型。来自assertTrue上的JUnit文档:

public static void assertTrue(boolean condition)

您可以看到它不会抛出任何已检查的异常。

此外,在JUnit测试中调用catch块中的fail()并不是必需的。如果抛出未捕获的异常,单元测试将自动失败。

答案 3 :(得分:1)

只需将throws WhateverException添加到测试签名中,如果抛出异常,测试将失败。

答案 4 :(得分:1)

实际上并不清楚您使用代码实现了什么。如果你想在jUnit触发的异常中有一个格式正确的消息,如果你的断言失败,那么考虑用这种方式编写它:

assertTrue("Condition should hold because....", conditionToCheck);

这样,如果检查失败,jUnit将打印您提供的消息。我强烈推荐这一点,特别是如果你有很多测试,因为它

  • 可帮助您快速识别问题
  • 帮助您的团队成员了解断言的目的

答案 5 :(得分:0)

SomeException修改Exception将导致代码编译。

答案 6 :(得分:-1)

显然我的问题不明确。

我有很多单元测试,所有方法都抛出相同的异常,并带有不同的错误信息。 “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());
        }
...