自定义 assertThatThrownBy
Custom assertThatThrownBy
阅读这篇文章后 article 我肯定会写自己的断言,但我失败了。 :-(
我们有一个如下所示的界面:
public class ApplicationException extends RuntimeException {
public String enhancedStatus() {
return getClass().getSimpleName();
}
}
我按照文章中的描述编写了自己的 EnhancedStatusAssert。
public class EnhancedStatusAssert extends AbstractAssert<EnhancedStatusAssert, ApplicationException> {
public EnhancedStatusAssert(ApplicationException actual) {
super(actual, EnhancedStatusAssert.class);
}
public static EnhancedStatusAssert assertThat(ApplicationException actual) {
return new EnhancedStatusAssert(actual);
}
public EnhancedStatusAssert hasEnhancedCause(String enhancedStatus) {
isNotNull();
// check condition
if (!actual.enhancedStatus().equals(enhancedStatus)) {
failWithMessage("Expected enhanced status to be <%s> but was <%s>", enhancedStatus, actual.enhancedStatus());
}
return this;
}
}
哪个工作正常,但我无法覆盖 assertThatThrownBy
assertThatThrownBy(() -> { throw new ApplicationException()})
.isInstanceOf(ApplicationException.class)
.hasEnhancedCause("cause");
如何到达运行?
谢谢,
马库斯
尝试使用 asInstanceOf
https://assertj.github.io/doc/#assertj-core-3.13.0-asInstanceOf 您可以为您的 ApplicationException
编写自己的 InstanceOfAssertFactory
。
如果您只有一个字段需要检查,您可以使用 ... extracting 提取它,并对提取的值进行链式断言。
阅读这篇文章后 article 我肯定会写自己的断言,但我失败了。 :-(
我们有一个如下所示的界面:
public class ApplicationException extends RuntimeException {
public String enhancedStatus() {
return getClass().getSimpleName();
}
}
我按照文章中的描述编写了自己的 EnhancedStatusAssert。
public class EnhancedStatusAssert extends AbstractAssert<EnhancedStatusAssert, ApplicationException> {
public EnhancedStatusAssert(ApplicationException actual) {
super(actual, EnhancedStatusAssert.class);
}
public static EnhancedStatusAssert assertThat(ApplicationException actual) {
return new EnhancedStatusAssert(actual);
}
public EnhancedStatusAssert hasEnhancedCause(String enhancedStatus) {
isNotNull();
// check condition
if (!actual.enhancedStatus().equals(enhancedStatus)) {
failWithMessage("Expected enhanced status to be <%s> but was <%s>", enhancedStatus, actual.enhancedStatus());
}
return this;
}
}
哪个工作正常,但我无法覆盖 assertThatThrownBy
assertThatThrownBy(() -> { throw new ApplicationException()})
.isInstanceOf(ApplicationException.class)
.hasEnhancedCause("cause");
如何到达运行?
谢谢, 马库斯
尝试使用 asInstanceOf
https://assertj.github.io/doc/#assertj-core-3.13.0-asInstanceOf 您可以为您的 ApplicationException
编写自己的 InstanceOfAssertFactory
。
如果您只有一个字段需要检查,您可以使用 ... extracting 提取它,并对提取的值进行链式断言。