Junit的Assert类自带很多的断言方法,比如常用的有:
那我们为什么还要使用第三方的断言库呢?
我们来看一个场景,假设你的应用在网络断开时会显示一个View来提示用户“网络不可用,请连接网络。”
那么我们来测试这个View有没有显示,如果使用Junit断言是这样:
assertEquals(View.GONE, view.getVisibility());
而使用assertJ是这样:
assertThat(view).isGone();
首先从代码简洁和可读性来说,assertJ就胜了一筹。然后最关键的是,当你的测试失败时,Junit会提示:
Expected: <8> but was: <4>
而assertJ的提示是:
Expected visibility <gone> but was <invisible>
相信你已经明白assertJ的妙处了。
而且assertJ还支持链式api:
assertThat(layout).isVisible()
.isVertical()
.hasChildCount(4)
.hasShowDividers(SHOW_DIVIDERS_MIDDLE);
更多api请查看:
包括org.assertj.core.api.Assertions.assertThat
和org.assertj.android.api.Assertions.assertThat
。