web-dev-qa-db-ja.com

トーストメッセージの外観をテストする方法

アクティビティでのトーストメッセージの表示をテストする方法を知っている人はいますか?

OPが投稿したものと同様のコードを使用しています この質問 あるアクティビティから次のアクティビティへのプログラムフローをテストするために。また、特定のアクティビティに関するトーストメッセージをテストできるようにしたいと思います。

34
Adrian

アクティビティでのトーストメッセージの表示をテストする方法を知っている人はいますか?

できません-ごめんなさい。つまり、Android "ねえ、トーストは表示されていますか?そしてそれはどのように見えますか?"と尋ねる方法がないということです。

22
CommonsWare

うーん、実際にありますisトーストの外観をテストする可能性。 Toastのサブクラス(例:MyOwnToast)を作成し、Toastの代わりにこれをプログラムで使用するだけです。このサブクラスでは、show()メソッドを上書きして、Toastが表示されていることを通知できます。

さらに、Toastをshow()メソッド内にToastDatabaseシングルトンのようなもので保存できます。そこからToastにアクセスでき、表示および破棄された後も表示されます(Toastでこれをテストしていませんが、私はよくそうします結果として、破棄された後もさらにテストできるようにするアクティビティが意図されているため、Toastsでこれを実装しても問題はありません)。

注意:Toastが破棄された後はおそらくnullになるため、ToastオブジェクトまたはToastDatabaseに対応するビューのクローンを作成する必要があるかもしれません。お役に立てれば!

12
ubuntudroid

実際に、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"));
    }

お役に立てれば

11
user2511882

私は、次の作品をチェックします:

if(someToast == null)
    someToast = Toast.makeText(this, "sdfdsf", Toast.LENGTH_LONG);
boolean isShown = someToast.getView().isShown();
6

Robolectric テストフレームワークを選択できます。トーストをチェックするには、次のように使用できます。

assertTrue(ShadowToast.showedCustomToast("message", R.id.message)); //R.id.message: textView ID
4
panda

トーストがメッセージで表示されていることを確認できます

ShadowToast.showedToast("expected message")

カスタムトーストを使用している場合

ShadowToast.showedToast("expected message", R.id.yourToastId)
4
Kevin Crain

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")
            )
        }
    }
}
0
OzzyTheGiant