如何在 AssertJ 中检查是否相等或两者都为空?
How to check for equality or both blank in AssertJ?
我想断言 expected
和 actual
彼此相等。如果两者都是 null
或空白 (""
) 也没关系——即 null
表示空白。
.withComparator(...).isEqualTo(expected)
不起作用,因为 null
之前被 AspectJ 检查过:
@Given("^data is \"([^\"]*)\"$")
void theDataIs(String arg) {
assertThat(msg.getData())
.usingComparator(blankOkComperator).isEqualTo(arg);
}
我的比较对象是 Kotlin,但你明白了:
object blankOkComperator : Comparator<String> {
override fun compare(o1: String?, o2: String?): Int {
if(StringUtils.isBlank(o1) && StringUtils.isBlank(o2)) return 0
if(StringUtils.isBlank(o1)) return -1
if(StringUtils.isBlank(o2)) return 1
return o1!!.compareTo(o2!!)
}
}
我只是设法通过覆盖 AssertJ 的 Condition<String>
来实现检查,但对我来说它看起来不是很 assert-j-ish:
@Given("^data is \"([^\"]*)\"$")
void theDataIs(String arg) {
assertThat(msg.getDate())
.is(new EqualToOrBothBlank(arg));
}
再说一次,助手是 Kotlin,但你知道我的意思:
class EqualToOrBothBlank(val expected: String) : Condition<String?>() {
override fun matches(actual: String?): Boolean {
if(StringUtils.isBlank(actual) && StringUtils.isBlank(expected)) return true;
return StringUtils.equals(actual, expected)
}
}
是否有 AspectJ 方式来实现检查?
目前您必须使用 Condition
,但如果使用特定的比较器,AssertJ 不检查 null 是合理的,我为此创建了 https://github.com/joel-costigliola/assertj-core/issues/1121。
与此同时,我会将条件实例放入一个字段中以提高代码的可读性:
@Given("^data is \"([^\"]*)\"$")
void theDataIs(String arg) {
assertThat(msg.getDate()).is(equalToOrBothBlank(arg));
}
哦,你多次提到 AspectJ 而不是 AssertJ :D
我想断言 expected
和 actual
彼此相等。如果两者都是 null
或空白 (""
) 也没关系——即 null
表示空白。
.withComparator(...).isEqualTo(expected)
不起作用,因为 null
之前被 AspectJ 检查过:
@Given("^data is \"([^\"]*)\"$")
void theDataIs(String arg) {
assertThat(msg.getData())
.usingComparator(blankOkComperator).isEqualTo(arg);
}
我的比较对象是 Kotlin,但你明白了:
object blankOkComperator : Comparator<String> {
override fun compare(o1: String?, o2: String?): Int {
if(StringUtils.isBlank(o1) && StringUtils.isBlank(o2)) return 0
if(StringUtils.isBlank(o1)) return -1
if(StringUtils.isBlank(o2)) return 1
return o1!!.compareTo(o2!!)
}
}
我只是设法通过覆盖 AssertJ 的 Condition<String>
来实现检查,但对我来说它看起来不是很 assert-j-ish:
@Given("^data is \"([^\"]*)\"$")
void theDataIs(String arg) {
assertThat(msg.getDate())
.is(new EqualToOrBothBlank(arg));
}
再说一次,助手是 Kotlin,但你知道我的意思:
class EqualToOrBothBlank(val expected: String) : Condition<String?>() {
override fun matches(actual: String?): Boolean {
if(StringUtils.isBlank(actual) && StringUtils.isBlank(expected)) return true;
return StringUtils.equals(actual, expected)
}
}
是否有 AspectJ 方式来实现检查?
目前您必须使用 Condition
,但如果使用特定的比较器,AssertJ 不检查 null 是合理的,我为此创建了 https://github.com/joel-costigliola/assertj-core/issues/1121。
与此同时,我会将条件实例放入一个字段中以提高代码的可读性:
@Given("^data is \"([^\"]*)\"$")
void theDataIs(String arg) {
assertThat(msg.getDate()).is(equalToOrBothBlank(arg));
}
哦,你多次提到 AspectJ 而不是 AssertJ :D