Android Testing içeriklerine yeniyim. Bir düğmeyi tıklatmanız ilgili bir etkinliğin açılıp açılmayacağını test etmek isterim. Biraz araştırma yaptım ve kontrolü yapmak için ActivityManager kullanmam gerekeceğini öğrendim.Button.perform Nasıl çağırılır Android JUnit test vakasında?
Sorun şu ki, "tıklayarak" parçasını çalışamıyorum. Button.performClick()
'u kullanmaya çalışıyorum.
Öncelikle bu işlevi çağırdım ve bunu geçerli iş parçacığında yapamayacağımı söyleyen bir hata aldım. Bazı kullanıcılardan sonra, UI dizisinde aramam gerektiğini ve runOnUiThread(Runnable r) method
numaralı telefondan geldiğini öğrendim.
Tıklamaya çalıştığım düğme _helloButton_
. Bu _setUp()_ method
'da elde edilir. Orada olduğundan emin olmak için _assertNotNull_
'u kontrol ettim. Bir test yöntemi içinde
mActivity.runOnUiThread(new Runnable() {
public void run() {
helloButton.requestFocus();
}
});
helloButton.performClick();
arayıp
requestFocus()
çağıran çizgisinde bir NPE olsun.
Sonraki Ben
mActivity.runOnUiThread(new Runnable() {
public void run() {
helloButton.performClick();
}
});
çalıştı ve hala aynı boş işaretçi istisna olsun. JUnit perspektifi üzerinde
, bu mesaj
Test failed to run to completion. Reason: 'Instrumentation run failed due to 'java.lang.NullPointerException''. Check device logcat for details
olsun Ve stackTrace buna benziyor. Ben helloButton.performClick()
arıyorum nereye
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)
Hat 57 olduğunu.
NPE aldığımdan emin değilim; assertNotNull sorunsuz geçer. Bu konuda bana yardımcı olabilirseniz, gerçekten takdir ediyorum. Şimdiden teşekkürler.
DÜZENLEME: Bu özel test sınıfı için alt sınıf ActivityInstrumentationTestCase2 kullanıyorum.
DÜZEN 2: Logcat, NPE oluşmadan önce bazı hataları uyarır. 08:
Ben
08-05 20 bkz 54,702: HATA/AndroidRuntime (754): HATA: 08:: 58.642: iplik
ve
08-05 20 başarısız bağlayabilecektir HATA/gralloc (52): [kayıt dışı] 0x3e1b28 işlemek için hala kilitli (durum = 40000001)
açık bilgi için, yeni bir faaliyetin başlatılmasını tetikleyecektir bir düğmeye basarak istediğiniz gibi aşağıda runTestOnUiThread() yöntemini kullanabilir? –
evet. Düğmede, başka bir etkinliği başlatan bir onClickListener vardır. –