在Java的测试中,推荐使用AssertJ

我认为在Java中进行测试时通常会使用JUnit4,但我个人推荐除此之外还使用AssertJ。

    AssertJ

AssertJ易用的理由

AssertJ比JUnit4的assertThat更易用的原因有两点。

One possible paraphrase in Chinese:
使用AssertJ比JUnit4的assertThat更方便的原因有两个。

流暢的界面

Paraphrase:
AssertJ以其主页上大大写着的“用于Java的流畅断言”而言,其流畅的接口是其最重要的特点。无需繁琐地查询文档,仅仅通过IDE的自动补全功能就能找到正确的方法,相较于JUnit4的assertThat更易于编写。

拡張非常容易,相较于Matcher而言。

由于Matcher的扩展对象是“比较方法”,而AssertJ的扩展对象是“类”,所以进行比较可能不太恰当。与Matcher的扩展有点像脚上穿鞋刮脚一样,而AssertJ的扩展则更加简单。

而且,实际编写程序时,并不常需要扩展比较方法的情况,更多的是希望在自定义类中进行断言。

自定义断言的定义

可以这样来创建FooClass的自定义断言。可能会觉得使用泛型有点奇怪,但是自己动手试一试就会明白。

public class FooClassAssert extends AbstractAssert<FooClassAssert, FooClass> {
  // ここは定型文
  public FooClassAssert(FooClass actual) {
    super(actual, FooClassAssert.class);
  }

  // ここも定型文
  public static FooClassAssert assertThat(FooClass actual) {
    return new FooClassAssert(actual);
  }

  // 独自Assertion
  public FooClassAssert hasValue(String key) {
    // ここも定型文
    isNotNull();

    // Assertionの実質的な本体
    if (actual.getValue(key) == null) {
      failWithMessage("エラーメッセージ");
    }

    // メソッドチェーンをするためthisを返す
    return this;
  }
}

使用自定义断言

// assertThatを使うためのstatic importは必要
assertThat(fooObj).hasValue("bar");

最后

对于AssertJ来说,在日本它的知名度真是太低了,这让人感到非常遗憾。如果你对JUnit4的assertThat有些不满,为什么不试试看AssertJ呢?

bannerAds