我是Android測試人員的新手。我想測試點擊一個按鈕是否會打開相應的活動。我做了一些研究,發現我需要使用ActivityManager進行檢查。如何在Android JUnit測試用例中調用Button.performClick?
問題是,我不能得到的「咔嗒」的一部分工作。我正在嘗試使用Button.performClick()
。
起初我只是調用此函數,並得到一個錯誤說我不能在當前線程做到這一點。一些谷歌搜索後,我發現我需要在UI線程中調用它,並遇到runOnUiThread(Runnable r) method
。
我試圖點擊該按鈕_helloButton_
。這在_setUp()_ method
中獲得。我做了_assertNotNull_
檢查,以確保它在那裏。
內的測試方法,我稱之爲
mActivity.runOnUiThread(new Runnable() {
public void run() {
helloButton.requestFocus();
}
});
helloButton.performClick();
,我在排隊叫requestFocus()
獲得NPE。
下一個我試圖
mActivity.runOnUiThread(new Runnable() {
public void run() {
helloButton.performClick();
}
});
,並仍然得到同樣的空指針異常。
在JUnit的角度來看,我得到這個消息
Test failed to run to completion. Reason: 'Instrumentation run failed due to 'java.lang.NullPointerException''. Check device logcat for details
而且堆棧跟蹤這個樣子。 57
08-05 19:03:11.922: ERROR/AndroidRuntime(578): Uncaught handler: thread main exiting due to uncaught exception
08-05 19:03:11.922: ERROR/AndroidRuntime(578): java.lang.NullPointerException
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at com.example.helloworldmk2.test.HelloWorldMK2Test$1.run(HelloWorldMK2Test.java:57)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at android.os.Handler.handleCallback(Handler.java:587)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at android.os.Handler.dispatchMessage(Handler.java:92)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at android.os.Looper.loop(Looper.java:123)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at android.app.ActivityThread.main(ActivityThread.java:4363)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at java.lang.reflect.Method.invokeNative(Native Method)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at java.lang.reflect.Method.invoke(Method.java:521)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-05 19:03:11.922: ERROR/AndroidRuntime(578): at dalvik.system.NativeStart.main(Native Method)
行是我打電話helloButton.performClick()
。
我不知道爲什麼我得到NPE; assertNotNull通過沒有問題。如果你能幫我解決這個問題,我會很感激。提前致謝。
編輯:我繼承ActivityInstrumentationTestCase2這個特定的測試類。
EDIT2:logcat的噴出了一些錯誤,NPE發生之前。
我看到
08-05 20:08:54.702:ERROR/AndroidRuntime(754):錯誤:線程附加失敗
和
08-05 20:08:58.642:ERROR/gralloc(52):[註銷]處理0x3e1b28仍處於鎖定狀態(狀態= 40000001)
爲了澄清,你要按下一個按鈕,將觸發推出新的活動的方法是什麼? –
是的。該按鈕有一個onClickListener,它啓動另一個活動。 –