有一个对象,我想用空参数来测试它,这应该是
@notnull
。我预计测试方法会抛出异常,但事实并非如此。我使用自动配置的 H2 作为测试数据库。
@Transactional
@Test
public void expect_save_cameraWithNullName_throwsException() {
// arrange
camera.setCameraName(null);
// act and assert
Assertions.assertThatThrownBy(() ->
transactionTemplate.execute(status -> {
cameraRepository.save(camera);
return null;
})
).isInstanceOf(DataIntegrityViolationException.class);
}
TransactionTemplate
。我还尝试抛出任何异常而不是 DataIntegrityViolationException
来查看应用程序是否抛出任何异常,但没有异常应该抛出。
transactionTemplate 调用 TransactionCallback.doInTransaction(),如果发生 RuntimeException 或 Error,它只是回滚事务,而不传播 Exception 或错误。
所以下面的代码可能有效
@Transactional
@Test
public void expect_save_cameraWithNullName_throwsException() {
// arrange
camera.setCameraName(null);
// act and assert
Assertions.assertThatThrownBy(() ->
cameraRepository.save(camera))
).isInstanceOf(DataIntegrityViolationException.class);
}