2010-11-01 17 views
11

Belki bir şey özlüyorum. Bir BroadcastReceiver için test senaryoları yazmak istiyorum; özel olarak, BOOT_COMPLETED olayını almak ve daha sonra işlemek için başka bir alıcı için bir alarm ayarlamak; doğru bir şekilde ayarlanmış gibi görünmüyor, ama önemli olan nokta, test etmek için açık bir yolum yok. Bir hata ayıklayıcısını tam olarak ekleyemiyorum ve BOOT_COMPLETED değerini bekleyemiyorum ve sahte bir BOOT_COMPLETED yayını gönderemiyorum.BroadcastReceiver için neden test cihazı yok?

Neden BroadcastReceiver değil, Etkinlik, Hizmet ve Sağlayıcı için enstrümantasyon sınıfları var? Bunu test etmek için tavsiye var mı?

cevap

18

BroadcastReceiver için yaşam döngüsü hakkında büyülü hiçbir şey yoktur. Bir AndroidTestCase ile test etmek için yeterli. Bir test vakasında, BroadcastReceiver cihazınızı başlatın, AndroidTestCase veya bazı alay Context'te bulunan İçeriği kullanarak onReceive'ı göndermek ve göndermek istediğiniz herhangi bir Niyet yaratın.

E.g.

public class TestMyBroadcastReceiver extends AndroidTestCase { 
    public void testReceive() { 
    MyBroadcastReceiver r = new MyBroadcastReceiver(); 
    Intent i = new Intent("MY_ACTION"); 
    // TODO put extras 
    r.onReceive(getContext(), i); 
    // TODO query application state to verify results 
    } 
} 
+0

Basit ve işi yapar: Daha fazla bilgi (ve örnek) için

bakın! – Robert

7

çoğu için ben AndroidTestCase uzanan uygun değildir (ve sürpriz neden olabilir) zaman durumlar ancak vardır https://stackoverflow.com/a/5181010/527016

tamamen kabul. Özellikle, daha karmaşık bir entegrasyon testi yapıyorsanız ve sistem tarafından gönderilen bir Intent ile BroadcastReceiver test etmek istiyorsanız. Ana neden, yayın alıcısındaki onReceive yönteminin, ana uygulama iş parçacığı üzerinde çalıştırılmasıdır; bu sırada AndroidTestCase'daki testler, başka bir iş parçacığında çalışır. Bu, kodda birden çok iş parçacığı üzerinde çalışması amaçlanmayan testle ilgili sorunlara neden olabilir.

bu çözüm yerine InstrumentationTestCase adresinin testini alt sınıf ve onReceive yöntem olarak aynı iş parçacığı üzerinde kontrol ediyorlar yapmak @UiThreadTest ek açıklama kullanmaktır. http://olafurhelgason.blogspot.com/2012/12/threading-and-android-integration.html