Ответ 1
Кто-нибудь знает, как тестировать появление сообщения Toast на Активность
Вы не можете - извините. К тому, я имею в виду, что нет никакого способа спросить Android "эй, это тост показывает? И как он выглядит?".
Кто-нибудь знает, как тестировать появление сообщения Toast в Activity?
Я использую код, похожий на то, что OP размещал на этот вопрос для тестирования моего потока программ от одного действия к другому. Я также хотел бы проверить тестовые сообщения для конкретных действий.
Кто-нибудь знает, как тестировать появление сообщения Toast на Активность
Вы не можете - извините. К тому, я имею в виду, что нет никакого способа спросить Android "эй, это тост показывает? И как он выглядит?".
Hm, на самом деле есть возможность проверить внешний вид тоста. Просто создайте подкласс Toast (например, MyOwnToast) и используйте его в своей программе вместо Toast. В этом подклассе вы можете перезаписать метод show(), чтобы уведомить вас о том, что отображается Toast.
Кроме того, вы можете хранить Toast в методе show() в виде однотонального тоста ToastDatabase, откуда вы можете получить доступ к Toast, и его просмотр также после того, как он был показан и уничтожен (не тестировал это с помощью Toasts, но я часто делайте это с помощью результатов действий, чтобы держать их доступными для дальнейших тестов после их уничтожения - поэтому не должно быть никаких проблем с реализацией этого с Тостами).
Остерегайтесь: возможно, вам нужно клонировать объект Toast или соответствующее представление для ToastDatabase, потому что, вероятно, оно будет null после того, как Toast будет уничтожен. Надеюсь, это поможет!
Теперь мы можем проверить тестовые сообщения с помощью 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 test framework. Для проверки тоста вы можете использовать его, как показано ниже:
assertTrue(ShadowToast.showedCustomToast("message", R.id.message)); //R.id.message: textView ID
Вы можете проверить, что тост был показан сообщением
ShadowToast.showedToast("expected message")
Если вы используете пользовательский тост
ShadowToast.showedToast("expected message", R.id.yourToastId)
Для тех, кто сейчас использует 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")
)
}
}
}
Я использую его как:
wait_for_text("Notification message to be verified", timeout: 30)
Это альтернативный способ, который частично служит цели.