如何检查在AssertJ中的平等或两者都为空?

我想断言expectedactual是相等的。 如果两者都为null或空白( "" ) – 即null表示空白。

.withComparator(...).isEqualTo(expected)不起作用,因为之前通过AspectJ检查了null

 @Given("^data is \"([^\"]*)\"$") void theDataIs(String arg) { assertThat(msg.getData()) .usingComparator(blankOkComperator).isEqualTo(arg); } 

我的比较者是Kotlin,但你有这样的想法:

 object blankOkComperator : Comparator { 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来实现检查,但是对我来说看起来并不是很强硬:

 @Given("^data is \"([^\"]*)\"$") void theDataIs(String arg) { assertThat(msg.getDate()) .is(new EqualToOrBothBlank(arg)); } 

再一次,帮手是Kotlin,但你明白我的意思:

 class EqualToOrBothBlank(val expected: String) : Condition() { 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)); } 

哦,你提几次AssertJ而不是AssertJ:D