在单元测试中捕获SQLException而不是Spring DataIntegrityViolationException

时间:2014-09-30 15:33:57

标签: java sql spring unit-testing

我正在编写单元测试来使用存储过程测试DB中的更新失败。我有一个更新其中一个表的存储过程。从测试开始,我在存储过程中发送了不正确的数据(即违反表中完整性约束的数据)。所以我期待SQLException,但它正在抛出Spring的DataIntegrityViolationException。所以我的问题是: 不应该捕获SQLException是正确的方法,因为它更通用吗?

@Test(expected = SQLException.class)
public void testFailedSaveOp() {
    myService.savePerson(garbagePersonData);
}    

1 个答案:

答案 0 :(得分:1)

Spring将通用SQL异常转换为更具体的SQL异常(http://docs.spring.io/spring-framework/docs/2.5.6/api/org/springframework/jdbc/support/SQLExceptionTranslator.html)。大多数JDBC方法只抛出SQLException,这是非常广泛的,并没有真正告诉你什么是错的。 Spring会尝试为您提供您可能希望以不同方式处理的更具体的异常。

从更一般的意义上讲,考虑一下为什么不在任何地方抛出Exception。还有更具体的例外情况可以为您提供有关您可能希望以不同方式处理的事件的更多信息。