val intent1 = Intent(Intent.ACTION_VIEW)
val intent2 = Intent(Intent.ACTION_VIEW)
これに対し
assertThat(intent1).isEqualTo(intent2) // fail
は失敗します。Intent で equals() は override されていません。
では Intent の比較はどうするかというと filterEquals() を使います
assertThat(intent1.filterEquals(intent2)).isTrue() // success
Intent の構成をチェックしたいだけなら IntentSubject を使うという方法もあります。
IntentSubject.assertThat(intent1).hasAction(Intent.ACTION_VIEW) // success
class Navigator(private val context: Context) {
fun moveTo() {
context.startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://developer.android.com/")
)
)
}
}
このクラスに対して context.startActivity() の呼び出しをチェックする以下のテストは失敗します。Intent の equals() が false になるからです。
val context = mock(Context::class.java)
Navigator(context).moveTo()
// fail
verify(context).startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://developer.android.com/")
)
)
argThat を使って filterEquals() を使えば成功します。
val context = mock(Context::class.java)
Navigator(context).moveTo()
// success
verify(context).startActivity(argThat { intent ->
intent.filterEquals(
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://developer.android.com/")
)
)
})
0 件のコメント:
コメントを投稿