1

我想断言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 方式?

4

1 回答 1

1

目前您必须使用 aCondition但如果使用特定比较器,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

于 2017-11-26T00:26:40.573 回答