代码之家  ›  专栏  ›  技术社区  ›  towi

如何在AssertJ中检查相等或两者均为空白?

  •  1
  • towi  · 技术社区  · 8 年前

    我想断言 expected actual 彼此平等。如果两者都是可以的 null 或空白( "" )--即。 无效的 表示空白。

    .withComparator(...).isEqualTo(expected) 不起作用,因为 无效的 之前由AspectJ检查:

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

    我的比较对象是科特林,但你知道:

    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> 但在我看来,这并不是很有主张性:

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

    同样,助手是科特林,但你知道我的意思:

    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方法来实现检查?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Joel Costigliola    8 年前

    目前,您必须使用 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