如何捕获这个自定义Java异常?

时间:2015-09-29 15:49:38

标签: java exception junit exception-handling tdd

我有以下单元测试:

public class Update {

    @Rule
    public final ExpectedException exception = ExpectedException.none();

    private Update update;

    @Before
    public void setUp(){
        this.update = new Update();
    }

    @Test
    public void validateThrowsExceptionIfMissingId() throws BadParameterException {
        this.update.setId(null);

        exception.expect(NotFoundException.class);
        exception.expectMessage("Error");
        this.categoryUpdateRequest.validate();
    }
}

期待我正在抛出的自定义NotFoundException。问题是,即使我可以看到异常被抛出控制台,我的测试也没有得到它:

com.project.api.exception.NotFoundException: Error.

请提示吗?

2 个答案:

答案 0 :(得分:2)

您编写的Junit测试需要抛出异常。您的代码不会抛出异常。它只是创建一个Exception实例并调用(某种)异常处理函数。

您可以看到“异常”,因为您创建了一个异常实例并将其发送到记录器。但实际上对于你来说系统从来都不是一个真正的例外,因为你永远不会throw它。

JUnit绝对正确地抱怨没有抛出异常。

答案 1 :(得分:-2)

您可以使用TestNG @Test注释参数expectedExceptions

以下是一个例子:

public class CategoryUpdateRequestTest 
{

    private CategoryUpdateRequest categoryUpdateRequest;

    @Before
    public void setUp(){
        this.categoryUpdateRequest = new CategoryUpdateRequest();
    }

    @Test(
        expectedExceptions = { NotFoundException.class },
        expectedExceptionsMessageRegExp = "Category object is missing Category id."
    )
    public void validateThrowsExceptionIfMissingCategoryId() throws Exception {
        this.categoryUpdateRequest.setId(null);
    }
}