有人知道如何测试活动上Toast消息的外观吗?
我正在使用与this question上发布的OP类似的代码来测试从一个活动到下一个活动的程序流程。我还希望能够测试特定活动的Toast消息。
答案 0 :(得分:22)
有谁知道如何测试 在...上出现Toast消息 活动?
你不能 - 抱歉。通过它,我的意思是没有办法问Android“嘿,是Toast显示?它看起来像什么?”。
答案 1 :(得分:12)
嗯,实际上 有可能测试吐司的外观。只需创建Toast的子类(例如MyOwnToast)并在程序中使用此类而不是Toast。在此子类中,您可以覆盖show()方法以通知您正在显示Toast。
此外,您可以在ToastDatabase单例的种类中将Toast存储在show()方法中,您可以在其中访问Toast,并且在显示和销毁之后也可以查看它(没有使用Toasts测试它,但是我通常使用活动的结果意图来保持它们在被销毁后可用于进一步测试 - 所以使用Toasts实现它应该没有问题。
注意:也许您必须克隆Toast对象或ToastDatabase的相应视图,因为可能在Toast被销毁后它将为null。希望这有帮助!
答案 2 :(得分:9)
我们现在实际上可以使用robolectric
测试Toast消息。以下示例是我们的团队现在如何做到这一点:
@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"));
}
希望这有帮助
答案 3 :(得分:6)
我检查,以下工作:
if(someToast == null)
someToast = Toast.makeText(this, "sdfdsf", Toast.LENGTH_LONG);
boolean isShown = someToast.getView().isShown();
答案 4 :(得分:4)
您可以选择Robolectric测试框架。要检查烤面包,您可以按照以下方式使用它:
assertTrue(ShadowToast.showedCustomToast("message", R.id.message)); //R.id.message: textView ID
答案 5 :(得分:2)
您可以通过消息
检查烤面包是否已显示ShadowToast.showedToast("expected message")
如果您使用的是自定义吐司
ShadowToast.showedToast("expected message", R.id.yourToastId)
答案 6 :(得分:0)
对于现在在2019年使用AndroidX Test API并为烤面包使用自定义布局的用户,请尝试以下操作(Kotlin):
(define (f n)
(do ([i 0 (+ i 1)]
[n1 1 (+ n1 n3)]
[n2 1 (+ n1 n2)]
[n3 1 (+ n2 n3)])
((= i n) (list n1 n2 n3))))
(define (my-do-loop n)
(local ((define (λ0 i n1 n2 n3) (+ i 1))
(define (λ1 i n1 n2 n3) (+ n1 n3))
(define (λ2 i n1 n2 n3) (+ n1 n2))
(define (λ3 i n1 n2 n3) (+ n2 n3))
(define (aux i n1 n2 n3)
(if (= i n)
(list n1 n2 n3)
(aux (λ0 i n1 n2 n3)
(λ1 i n1 n2 n3)
(λ2 i n1 n2 n3)
(λ3 i n1 n2 n3)))))
(aux 0 1 1 1)))
答案 7 :(得分:0)
那(科特琳)呢?
onView(withText("Text of the toast"))
.inRoot(withDecorView(not(`is`(window.decorView))))
.check(matches(isDisplayed()))
答案 8 :(得分:-3)
我正在使用它:
wait_for_text("Notification message to be verified", timeout: 30)
这是一种部分达到目的的替代方式。