2013-12-16 10 views
5

私は物理的なアンドロイドデバイス上で動作するいくつかのブラックボックスの受け入れテストを書いています。テスト中のアプリケーション(AUT)は、カメラのプレビューに依存します。具体的には、android.hardware.CameraクラスのsetOneShotPreviewCallbackメソッドを使用します。私はアプリの動作をテストするための偽のプレビュー画像を挿入する方法を探しています。Android:テスト目的のために偽のカメラプレビューを入力してください

テストコードでAUTのPreviewCallbackオブジェクトを呼び出すことでCameraオブジェクトをだますことができたと思っていましたが、残念ながらインスタンス変数mPreviewCallbackはCameraオブジェクトのプライベートなのでテストコードには参照がありませんPreviewCallbackオブジェクトです。

もう1つの方法は、EventHandlerにを送信することでしたが、フィールドmEventHandlerはプライベートなので、テストコードはハンドラへの参照を取得できません。

+1

私はこの提案があなたの物理的なデバイスルールを破るかもしれないと思うかもしれませんが、多分genymotionで走っていれば、あなたが望むトリックを達成することができます。 http://www.genymotion.com/features/ – Machinarius

+0

あなたのデバイスは根付いていますか? –

+0

@Machinarius:私はあなたの提案に従っており、ジェノモーションをインストールしました。それはソフトウェアの素晴らしい部分ですが、カメラのプレビューストリームに画像をプログラムで挿入する方法を見つけることができませんでした。これは、ゲノムの唯一のアクションは、私の物理的なウェブカメラのストリームをシミュレートされたカメラに接続することです。私は何か見落としたことがありますか? – lacton

答えて

0

Android mock CameraおよびHow to mock a picture in Android Emulator Camera?いずれの方法もルートデバイスを必要としませんが、アプリケーションを変更する必要があります。デックスを逆コンパイルすることで、ソースコードにアクセスできない場合でも必要な変更を加えることができると私は信じています。

+0

最初の質問(Android Mock Camera) Mockitoを使用してCameraクラスをモックすることを提案しています。それでも、[mockito公式文書](http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html)では、「Mockitoは最終的な方法を模倣しない」と述べています。ほとんどのカメラの方法は最終的なもので、嘲笑しているようです。カメラはオプションではありません。 – lacton

+0

[setOneShotPreviewCallback()](http://developer.android.com/reference/android/hardware/Camera.html#setOneShotPreviewCallback(android.hardware.Camera.PreviewCallback))のような最終的なメソッドは、ネイティブメソッドの周りのシンラッパーのみです。このメソッドを実装するための代替のネイティブライブラリをロードするmock Cameraクラスを作成できます。 –

関連する問題