在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呢?