我是 Android 测试方面的新手。我想测试单击按钮是否会打开相应的活动。我做了一些研究,发现我需要使用 ActivityManager 来进行检查。
问题是,我无法让“点击”部分正常工作。我正在尝试使用Button.performClick()
.
最初我只是调用这个函数,并收到一个错误,说我不能在当前线程中执行此操作。经过一番谷歌搜索后,我发现我需要在 UI 线程中调用它,并遇到了runOnUiThread(Runnable r) method
.
我试图点击的按钮是_helloButton_
。这是在_setUp()_ method
. I did _assertNotNull_
检查一下以确保它在那里。
在测试方法中,我调用
mActivity.runOnUiThread(new Runnable() {
public void run() {
helloButton.requestFocus();
}
});
helloButton.performClick();
我在拨打电话时收到 NPErequestFocus()
.
接下来我尝试了
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
stackTrace 看起来像这样。
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)
第 57 行是我要调用的地方helloButton.performClick()
.
我不知道为什么我会得到 NPE; assertNotNull 顺利通过。如果您能帮助我解决这个问题,我将不胜感激。提前致谢。
编辑:我正在为这个特定的测试类创建 ActivityInstrumentationTestCase2 子类。
EDIT2:Logcat 在 NPE 发生之前抛出一些错误。
I see
08-05 20:08:54.702:错误/AndroidRuntime(754):错误:线程附加失败
and
08-05 20:08:58.642:错误/gralloc(52):[取消注册]句柄0x3e1b28仍然锁定(状态= 40000001)