Spring Boot测试中应该抛出异常却没有抛出

问题描述 投票:0回答:1

有一个对象,我想用空参数来测试它,这应该是

@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);
}

enter image description here 我尝试使用固定数据库,而且最初我没有使用

TransactionTemplate
。我还尝试抛出任何异常而不是
DataIntegrityViolationException
来查看应用程序是否抛出任何异常,但没有异常应该抛出。

java spring unit-testing exception testing
1个回答
0
投票

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);

}

© www.soinside.com 2019 - 2024. All rights reserved.