如何测试Toast消息的外观

Adr*_*ian 34 android functional-testing

有谁知道如何测试活动上Toast消息的外观?

我正在使用类似于OP在此问题上发布的代码来测试从一个活动到下一个活动的程序流程.我还希望能够测试特定活动的Toast消息.

Com*_*are 22

有谁知道如何测试活动上Toast消息的外观?

你不能 - 抱歉.通过它,我的意思是没有办法问Android"嘿,是一个Toast显示?它看起来像什么?".

  • Voilà:myToast.getView().isShown(). (10认同)

ubu*_*oid 12

嗯,居然还有就是测试敬酒的外观的可能性.只需创建Toast的子类(例如MyOwnToast)并在程序中使用此类而不是Toast.在此子类中,您可以覆盖show()方法以通知您正在显示Toast.

另外,您可以在ToastDatabase单例的种类中将Toast存储在ToastDatabase单例中,您可以在其中访问Toast,并且在它显示和销毁后也可以查看它(没有使用Toasts测试它,但我经常这样做结果意图使活动在销毁后保持可用于进一步测试 - 因此使用Toasts实现这一点应该没有问题.

注意:也许你必须克隆Toast对象或ToastDatabase的相应视图,因为它可能在Toast被销毁后为null.希望这可以帮助!

  • 好主意 - 但在为生产代码添加代码时要小心,仅用于测试目的.我建议使用一种方法在最终的生产代码中禁用这个"测试代码",可能是通过检查清单中的调试标志http://stackoverflow.com/a/4277868/383414 (2认同)

use*_*882 11

我们现在实际上可以使用测试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"));
    }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


Ole*_*nko 6

我检查,以下工作:

if(someToast == null)
    someToast = Toast.makeText(this, "sdfdsf", Toast.LENGTH_LONG);
boolean isShown = someToast.getView().isShown();
Run Code Online (Sandbox Code Playgroud)


Kev*_*ain 5

您可以检查消息是否显示了吐司

ShadowToast.showedToast("expected message")
Run Code Online (Sandbox Code Playgroud)

如果您使用的是自定义 Toast

ShadowToast.showedToast("expected message", R.id.yourToastId)
Run Code Online (Sandbox Code Playgroud)