アクティビティでのトーストメッセージの表示をテストする方法を知っている人はいますか?
OPが投稿したものと同様のコードを使用しています この質問 あるアクティビティから次のアクティビティへのプログラムフローをテストするために。また、特定のアクティビティに関するトーストメッセージをテストできるようにしたいと思います。
アクティビティでのトーストメッセージの表示をテストする方法を知っている人はいますか?
できません-ごめんなさい。つまり、Android "ねえ、トーストは表示されていますか?そしてそれはどのように見えますか?"と尋ねる方法がないということです。
うーん、実際にありますisトーストの外観をテストする可能性。 Toastのサブクラス(例:MyOwnToast)を作成し、Toastの代わりにこれをプログラムで使用するだけです。このサブクラスでは、show()メソッドを上書きして、Toastが表示されていることを通知できます。
さらに、Toastをshow()メソッド内にToastDatabaseシングルトンのようなもので保存できます。そこからToastにアクセスでき、表示および破棄された後も表示されます(Toastでこれをテストしていませんが、私はよくそうします結果として、破棄された後もさらにテストできるようにするアクティビティが意図されているため、Toastsでこれを実装しても問題はありません)。
注意:Toastが破棄された後はおそらくnullになるため、ToastオブジェクトまたはToastDatabaseに対応するビューのクローンを作成する必要があるかもしれません。お役に立てれば!
実際に、robolectric
を使用してトーストメッセージをテストできるようになりました。以下の例は、私たちのチームが今のところこれをどのように行っているかです。
@Test
public void ccButtonDisplaysToast() throws NullPointerException {
Button ccRedButton = (Button) findViewById(R.id.cc_red);
cc_red.performClick(); --> this calls the actual onClickListener implementation which has the toast.
ShadowLooper.idleMainLooper(YOUR_TIME_HERE); --> This may help you.
assertThat(ShadowToast.getTextOfLatestToast().toString(), equalTo("TEST_YOUR_TEXT_HERE"));
}
お役に立てれば
私は、次の作品をチェックします:
if(someToast == null)
someToast = Toast.makeText(this, "sdfdsf", Toast.LENGTH_LONG);
boolean isShown = someToast.getView().isShown();
Robolectric テストフレームワークを選択できます。トーストをチェックするには、次のように使用できます。
assertTrue(ShadowToast.showedCustomToast("message", R.id.message)); //R.id.message: textView ID
トーストがメッセージで表示されていることを確認できます
ShadowToast.showedToast("expected message")
カスタムトーストを使用している場合
ShadowToast.showedToast("expected message", R.id.yourToastId)
2019年にAndroidXTest APIを使用し、トーストのカスタムレイアウトを使用している場合は、これを試してください(Kotlin):
@RunWith(AndroidJUnit4:class)
class ActivityUnitTest {
private lateinit var scenario: ActivityScenario<MainActivity>
@Before fun setUp() {
scenario = ActivityScenario.launch(MainActivity::class.Java)
}
@Test fun shouldDisplayToastErrorMessageIfSearchFieldIsEmpty() {
scenario.onActivity { activity ->
activity.id_of_button.performClick()
assertThat(
ShadowToast.getLatestToast().view.id_of_textview.text.toString(),
equalTo("Text to be tested")
)
}
}
}