任何人都不知道如何測試Activity上Toast消息的外觀嗎?如何測試Toast消息的外觀
我使用的代碼類似於OP發佈在this question上的代碼,用於測試從一個活動到另一個活動的程序流。我也希望能夠測試特定活動的吐司消息。
任何人都不知道如何測試Activity上Toast消息的外觀嗎?如何測試Toast消息的外觀
我使用的代碼類似於OP發佈在this question上的代碼,用於測試從一個活動到另一個活動的程序流。我也希望能夠測試特定活動的吐司消息。
是否有人知道如何測試 活動上Toast消息的外觀 ?
你不能 - 對不起。我的意思是,沒有辦法問Android「嘿,吐司是什麼樣的?它看起來像什麼?」。
嗯,其實是測試烤麪包的外觀的可能性。只需創建一個Toast的子類(例如MyOwnToast),然後在程序中使用此類代替Toast。在這個子類中,你可以覆蓋show()方法來通知你,Toast正在顯示。
此外,您可以在show()方法中以ToastDatabase單例的類型存儲Toast,從中可以訪問Toast,它也是在它已被顯示和銷燬之後的視圖(尚未使用Toasts進行測試,但是我經常這樣做,其結果意圖是讓它們在被銷燬之後用於進一步的測試 - 因此用Toast來實現這一點應該沒有問題)。
請注意:也許您必須克隆Toast對象或ToastDatabase的相應視圖,因爲在Toast被銷燬後它可能爲空。希望這可以幫助!
感謝那個lordfinga。聽起來像一個比我描述的整潔的解決方案。 – Adrian 2010-03-29 19:53:35
好主意 - 但在爲了測試目的而將代碼添加到產品代碼時要小心。我會推薦一種方法在最終生產代碼中禁用此「測試代碼」,可能通過檢查清單中的調試標誌http://stackoverflow.com/a/4277868/383414 – 2012-04-26 13:53:24
我檢查一下,以下工作:
if(someToast == null)
someToast = Toast.makeText(this, "sdfdsf", Toast.LENGTH_LONG);
boolean isShown = someToast.getView().isShown();
如果我們的確在問「怎麼可以一個ActivityUnitTestCase斷言生產代碼用某種內容引發了Toast「,那麼這樣的測試不應該依賴額外的生產代碼。例如,如果您重構了代碼,那麼您不希望測試中斷,而在生產中仍會顯示真正的Toast。 – Phlip 2013-09-29 00:56:43
你可以選擇Robolectric測試framework.For檢查敬酒,你可以如下使用它:
assertTrue(ShadowToast.showedCustomToast("message", R.id.message)); //R.id.message: textView ID
我使用它喜歡:
wait_for_text("Notification message to be verified", timeout: 30)
這是部分服務於此目的的替代方式。
什麼是wait_for_text()?這個名稱在Android API中沒有任何方法。 – 2015-06-16 03:06:17
如果您使用的不是Java語言,您應該指定。 – 2015-06-16 03:10:05
「wait_for_text」是Calabash api中的一種方法ruby – 2015-07-01 09:47:02
我們實際上現在可以使用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"));
}
希望這有助於
在我看來,在你調用'performClick()'的時間之間,並斷言可能還沒有出現烤麪包,並且會在斷言之後出現飾面。我們如何解釋這種可能性? – 2015-06-16 14:54:39
Robolectric有一個已被棄用的shadowHandler.idleMainLooper。然而有一個ShadowLooper.idleMainLooper()有多個實現。其中一人以「時間」作爲觸發執行的參數。 – user2511882 2015-06-16 16:09:13
你可以檢查如果您正在使用自定義的麪包是由消息
ShadowToast.showedToast("expected message")
所示吐司
ShadowToast.showedToast("expected message", R.id.yourToastId)
感謝您的CommonsWare。我可能會做一些事情,比如在創建Toast時用Toast消息填充一個變量。它對用戶是不可見的,但會給我一些東西來檢查。 – Adrian 2010-03-12 20:59:09
Voilà:myToast.getView()。isShown()。 – 2012-08-08 06:21:47