java - 包含字段的特定异常的断言
问题描述
目前我有一个测试,它试图检查一个特定的异常,如下所示:
assertThatExceptionOfType(DataIntegrityViolationException.class).isThrownBy(
() -> xrepo.save(abc))
.withCauseExactlyInstanceOf(ConstraintViolationException.class);
该异常ConstraintViolationException
有一个constraintName
可通过 getter 获得的字段,getConstraintName()
但我还没有找到通过 assertj 进行检查的方法。
我可以想象以下内容:
assertThatExceptionOfType(DataIntegrityViolationException.class).isThrownBy(
() -> xrepo.save(abc))
.withCauseExactlyInstanceOf(ConstraintViolationException.class)
.with("getConstraintName").isEqualTo("XXXX");
还是有其他方法可以做到这一点?
解决方案
withCauseExactlyInstanceOf
不会改变被测对象,但havingCause()
可以对原因进行进一步的断言。
结合asInstanceOf()
and returns()
,类型安全检查将是:
assertThatExceptionOfType(DataIntegrityViolationException.class).isThrownBy(
() -> xrepo.save(abc))
.havingCause()
.asInstanceOf(type(ConstraintViolationException.class))
.returns("XXXX", from(ConstraintViolationException::getConstraintName));
或者没有类型安全,使用isInstanceOf
and hasFieldOrPropertyWithValue
:
assertThatExceptionOfType(DataIntegrityViolationException.class).isThrownBy(
() -> xrepo.save(abc))
.havingCause()
.isInstanceOf(ConstraintViolationException.class)
.hasFieldOrPropertyWithValue("getConstraintName", "XXX")
推荐阅读
- angularjs - angularjs-route 未加载 angular --prod 标志(angular-cli)
- android - Change hint programmaticaly with kotlin for material.textfield
- c++ - C++::使用模板技巧访问多个私有成员
- php - 从 foreach xml 值中的 foreach 在数组中创建数组
- robotframework - 网页上的文字可见
- python - Abaqus python脚本:选择共享相同坐标的两个连接器之一
- r - 尝试在 R 中生成相关矩阵的“未使用参数”错误消息
- python - Plotly:如何查找和注释两条线之间的交点?
- timestamp - Sectigo 时间戳服务器总是使用 SHA384 而不是 SHA1
- python - 如何从列表中创建 Pandas 数据框?