2013-12-16 2 views
5

Я пишу чемоданы, приемочные тесты, которые запускаются на физическом устройстве Android. Тестирование приложения (AUT) зависит от предварительного просмотра камеры. В частности, он использует метод setOneShotPreviewCallback класса android.hardware.Camera. Я ищу способ ввести фальшивое изображение предварительного просмотра, чтобы проверить поведение приложения.Android: предварительная предварительная предварительная предварительная фотокамера для целей тестирования

Я думал, что я мог бы обмануть объект камеры при наличии тестового кода вызова в AUT в PreviewCallback объекте, но, к сожалению, экземпляр переменного mPreviewCallback является частным объектом камеры и, таким образом, мой тестовый код не имеет возможностей получить ссылку на PreviewCallback объект.

Другой способ, которым я думал о том, чтобы отправить Message к камеры EventHandler, но опять же поле mEventHandler является частным, поэтому тестовый код не имеет возможности получить ссылку на Handler.

+1

Я думаю, что это предложение может нарушить ваше физическое правило устройства, но, возможно, работа над genymotion может достичь трюка, которого вы желаете. http://www.genymotion.com/features/ – Machinarius

+0

Является ли ваше устройство укорененным? –

+0

@Machinarius: Я последовал твоему предложению и установил гениоз. Хотя это прекрасный кусок программного обеспечения, я не мог найти способ программно вставить изображение в поток предварительного просмотра камеры. Кажется, единственное действие, которое позволяют genymotions, - связать поток моей физической веб-камеры с имитируемой камерой. Я что-то упустил? – lacton

ответ

0

См. Android mock Camera и How to mock a picture in Android Emulator Camera? Оба метода не нуждаются в корневом устройстве, но требуют изменения приложения. Я считаю, что вы можете внести необходимые изменения, даже если у вас нет доступа к исходному коду, декомпиляцией dex.

+0

Первый вопрос (Android mock Camera) предлагает использовать Mockito для издевательства над классом камеры. Тем не менее, [mockito offical doc] (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)) - это только тонкие обертки вокруг собственных методов. Вы можете создать макет класса камеры, который будет загружать альтернативную собственную библиотеку для реализации этого метода. –

Смежные вопросы