我有以下单元测试:
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.
请提示吗?
答案 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);
}
}