2013-12-16 28 views
5

Fiziksel bir android cihazda çalışan bazı kara kutu, kabul testleri yazıyorum. Test altındaki uygulama (AUT) kameranın önizlemesine dayanır. Özellikle, android.hardware.Camera sınıfının setOneShotPreviewCallback yöntemini kullanır. Uygulamanın davranışını test etmek için sahte bir önizleme resmi enjekte etmenin bir yolunu arıyorum.Android: Test amacı için sahte kamera ön izlemesini enjekte Edin

ben test kodu çağrısı AUT 'PreviewCallback nesne alarak Kamera nesne kandırabiIirim sandım, ama ne yazık ki, örneğin değişken mPreviewCallback Kamera nesneye özeldir ve böylece benim test kodu bir başvuru almak için bir yol vardır PreviewCallback nesnesi.

Kamera en EventHandler bir Message göndermekti, fakat test kodu Handler'a bir başvuru almak için bir yol vardır, böylece tekrar alan mEventHandler, özeldir hakkında düşündüğüm bir başka yolu.

+1

Bu öneri fiziksel cihaz kuralınızı bozabilir ama belki de genymotion üzerinde koşarak istediğiniz hile elde edebilirsiniz. http://www.genymotion.com/features/ – Machinarius

+0

Cihazınız kök mü? –

+0

@Machinarius: Önerinizi takip ettim ve genymotion kurdum. İyi bir yazılım parçası olsa da, kameranın önizleme akışında bir görüntüyü program aracılığıyla enjekte etmenin bir yolunu bulamadım. Genymotions'ın izin verdiği tek hareket, fiziksel web kameramın akışını simüle kameralara bağlamak gibi görünüyor. Bir şeyi gözden kaçırdım mı? – lacton

cevap

0

Lütfen bkz. Android mock Camera ve How to mock a picture in Android Emulator Camera? Her iki yöntemde de köklü aygıta gerek yoktur, ancak uygulamanın değiştirilmesi gerekir. Kaynak koduna erişiminiz olmasa bile, dex'i deşifre ederek gerekli değişiklikleri yapabileceğinizi düşünüyorum.

+0

İlk soru (Android mock Camera) Camera sınıfını taklit etmek için Mockito kullanmasını önerir. Ancak, [mockito resmi dokümanı] (http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html) "Mockito'nun son yöntemleri alamadığını" belirtiyor. Pek çok kameranın yöntemleri nihai olmakta, alay gibi görünüyor Kamera bir seçenek değil. – lacton

+0

[setOneShotPreviewCallback()] gibi son yöntemler (http://developer.android.com/reference/android/hardware/Camera.html#setOneShotPreviewCallback (android.hardware.Camera.PreviewCallback)), yalnızca yerel yöntemlerin etrafındaki ince sarmalayıcılardır. Bu yöntemi uygulamak için alternatif bir yerel kitaplık yükleyecektir sahte Kamera sınıfı oluşturabilirsiniz. –