android – 包含生产代码中的Toast的单元测试失败

android – 包含生产代码中的Toast的单元测试失败,第1张

概述@Rulepublic ActivityTestRule<LoginTestActivity> mLoginActivityTestRule = new ActivityTestRule<>(LoginTestActivity.class);@Testpublic void loginWithTwitter() throws Exception{ mLoginActivityTe
@Rulepublic ActivityTestRule<LoginTestActivity> mLoginActivityTestRule = new ActivityTestRule<>(LoginTestActivity.class);@Testpublic voID loginWithTwitter() throws Exception{    mLoginActivityTestRule.getActivity().performLogin();}

当我正常运行应用程序时,上面的performLogin函数工作正常,但是当我在单元测试中运行它时,我得到了这个可怕的异常:

java.lang.RuntimeException: Can't create handler insIDe thread that has not called Looper.prepare()

错误行是我在主线程上使用以下方式显示Toast的地方:

Toast.makeText(getApplicationContext(),“Login Success!”,Toast.LENGTH_LONG).show();

当我将其作为单元测试运行时,为什么会失败?我猜一个ActivityTestRule以某种方式在它自己的线程上运行,并且它不被AndroID视为主线程.我该如何解决?

我尝试传入getInstrumentation().getTargetContext()作为Toa​​st的上下文但发生了同样的错误.我应该在调用中包装每个toast显示以明确地在UI线程上运行吗?

解决方法 有几种解决方案:

>使用支持库中的@UiThreadTest批注对测试进行批注.

要么

>调用mLoginActivityTestRule.runOnUiThread仅在UI线程上运行测试部分.

希望其中一个解决方案能解决您的问题.

总结

以上是内存溢出为你收集整理的android – 包含生产代码中的Toast的单元测试失败全部内容,希望文章能够帮你解决android – 包含生产代码中的Toast的单元测试失败所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1125988.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存