Подтвердить что ты не робот

Как проверить появление сообщения Toast

Кто-нибудь знает, как тестировать появление сообщения Toast в Activity?

Я использую код, похожий на то, что OP размещал на этот вопрос для тестирования моего потока программ от одного действия к другому. Я также хотел бы проверить тестовые сообщения для конкретных действий.

4b9b3361

Ответ 1

Кто-нибудь знает, как тестировать появление сообщения Toast на Активность

Вы не можете - извините. К тому, я имею в виду, что нет никакого способа спросить Android "эй, это тост показывает? И как он выглядит?".

Ответ 2

Hm, на самом деле есть возможность проверить внешний вид тоста. Просто создайте подкласс Toast (например, MyOwnToast) и используйте его в своей программе вместо Toast. В этом подклассе вы можете перезаписать метод show(), чтобы уведомить вас о том, что отображается Toast.

Кроме того, вы можете хранить Toast в методе show() в виде однотонального тоста ToastDatabase, откуда вы можете получить доступ к Toast, и его просмотр также после того, как он был показан и уничтожен (не тестировал это с помощью Toasts, но я часто делайте это с помощью результатов действий, чтобы держать их доступными для дальнейших тестов после их уничтожения - поэтому не должно быть никаких проблем с реализацией этого с Тостами).

Остерегайтесь: возможно, вам нужно клонировать объект Toast или соответствующее представление для ToastDatabase, потому что, вероятно, оно будет null после того, как Toast будет уничтожен. Надеюсь, это поможет!

Ответ 3

Теперь мы можем проверить тестовые сообщения с помощью 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"));
    }

Надеюсь, что это поможет

Ответ 4

Я проверяю, что следующие работы:

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

Ответ 5

вы можете выбрать Robolectric test framework. Для проверки тоста вы можете использовать его, как показано ниже:

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

Ответ 6

Вы можете проверить, что тост был показан сообщением

ShadowToast.showedToast("expected message")

Если вы используете пользовательский тост

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

Ответ 7

Для тех, кто сейчас использует AndroidX Test API в 2019 году и использует собственный макет для тостов, попробуйте это (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")
            )
        }
    }
}

Ответ 8

Я использую его как:

wait_for_text("Notification message to be verified", timeout: 30)

Это альтернативный способ, который частично служит цели.