2013-12-16 12 views
5

ich einige Black-Box schreibe, Abnahmen, die auf einem physischen Android-Gerät laufen. Die zu testende Anwendung (AUT) basiert auf der Vorschau der Kamera. Insbesondere verwendet sie die setOneShotPreviewCallback Verfahren der android.hardware.Camera Klasse. Ich bin auf der Suche nach einer Möglichkeit, ein gefälschtes Vorschaubild zu erstellen, um das Verhalten der App zu testen.Android: Spritzen gefälschte Kamera-Vorschau für Testzwecke

Ich dachte, ich die Kamera Objekt täuschen konnte den Testcode Aufruf der PreviewCallback Objekt AUT, indem, aber leider die Instanzvariable mPreviewCallback ist an die Kamera Objekt privat und damit mein Testcode keine Möglichkeit hat, einen Verweis auf die bekommen PreviewCallback Objekt.

Ein anderer Weg, dachte ich über eine Message an der Kamera EventHandler, aber auch hier das Feld mEventHandler ist privat, zu senden war so der Testcode keine Möglichkeit, einen Verweis auf die Handler zu bekommen hat.

+1

Ich denke, dieser Vorschlag Ihre physische Gerät Regel brechen könnte, aber vielleicht auf genymotion laufen kann den Trick, den Sie wünschen erreichen. http://www.genymotion.com/features/ – Machinarius

+0

Ist Ihr Gerät verwurzelt? –

+0

@Machinarius: Ich habe deinen Vorschlag gefolgt und habe genymotion installiert. Obwohl es ein gutes Stück Software ist, konnte ich keine Möglichkeit finden, ein Bild programmatisch in den Vorschau-Stream der Kamera zu injizieren. Es scheint, die einzige Aktion, die genymotions erlaubt, ist es, den Stream meiner physischen Webcam mit der simulierten Kamera zu verbinden. Habe ich etwas übersehen? – lacton

Antwort

0

Bitte siehe Android mock Camera und How to mock a picture in Android Emulator Camera? Beide Methoden benötigen kein gerootetes Gerät, erfordern jedoch eine Änderung der Anwendung. Ich glaube, dass Sie die notwendigen Änderungen vornehmen können, selbst wenn Sie keinen Zugriff auf den Quellcode haben, indem Sie das dex dekompilieren.

+0

Die erste Frage (Android Mock-Kamera) ausgeführt werden soll schlägt vor, mit Mockito die Kamera-Klasse zu verspotten. Doch [die Mockito offical doc] (http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html) heißt es, dass "Mockito nicht endgültig Methoden nicht spotten". Die meisten Methoden der Kamera sind endgültig, es scheint spöttisch zu sein. Kamera ist keine Option. – lacton

+0

Die endgültigen Methoden wie [setOneShotPreviewCallback()] (http://developer.android.com/reference/android/hardware/Camera.html#setOneShotPreviewCallback (android.hardware.Camera.PreviewCallback)) sind nur dünne Wrapper um native Methoden. Sie können die Scheinkamera-Klasse erstellen, die eine alternative native Bibliothek lädt, um diese Methode zu implementieren. –

Verwandte Themen