2019年2月20日水曜日

Intent の equals 判定には filterEquals() を使う

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 件のコメント:

コメントを投稿