Android模拟相机 [英] Android mock Camera

查看:192
本文介绍了Android模拟相机的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以模拟Android相机类?

  @Override 
public void setUp b $ b _camera = Mockito.mock(Camera.class);
}

无法生成模拟( ExceptionInitializerError createProxyClass )。



我应该在相机(不是我最喜欢的解决方案,真的想只是模拟类...)?



不同的模拟库然后Mockito?



希望有人能指出我的方向正确。



完成stacktrace ExceptionInitializerError

  java.lang.ExceptionInInitializerError 
在org.mockito .internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:85)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:62)
at org.mockito .internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:56)
at org.mockito.internal.creation.CglibMockMaker.createMock(CglibMockMaker.java:23)
at org.mockito.internal .util.MockUtil.createMock(MockUtil.java:26)
在org.mockito.internal.MockitoCore.mock(MockitoCore.java:51)
at org.mockito.Mockito.mock(Mockito.java :1243)
at org.mockito.Mockito.mock(Mockito.java:1120)
at com.cleancode.lifesaver.flashlight.test.FlashLightTests.setUp(FlashLightTests.java:20)
在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
在android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner。 java:555)
在android.app.Instrumentation $ InstrumentationThread.run(Instrumentation.java:1661)
导致:java.lang.VerifyError:org / mockito / cglib / core / ReflectUtils
at org.mockito.cglib.core.KeyFactory $ Generator.generateClass(KeyFactory.java:167)
at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
at org.mockito.cglib.core.KeyFactory $ Generator.create(KeyFactory.java:145)
at org。 mockito.cglib.core.KeyFactory.create(KeyFactory.java:117)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:109)
at org.mockito.cglib。 core.KeyFactory.create(KeyFactory.java:105)
at org.mockito.cglib.proxy.Enhancer。< clinit>(Enhancer.java:70)
... 18更多$ b $在你的堆栈跟踪中,注意子串.CglibMockMaker:这是一个字符串,它是一个字符串,它是一个字符串。问题。 CGLib不工作在Android - 有一个插件的Mockito专门为Android使用dexmaker,这是像CGLib,但工作dalvik。只要搜索dexmaker mockito,你应该在正确的路径。



你仍然不能够模拟Camera.open()(静态工厂方法)但你可以重构你的代码。重要的是,相机不是一个最后的类;其余的只是尴尬的水管测试,你应该只接受作为税务写作经过良好测试的Android应用程序。


Is it possible to mock the Android Camera class ?

@Override
public void setUp() {
    _camera = Mockito.mock(Camera.class);
}

fails to generate a mock (ExceptionInitializerError in Mockito's createProxyClass).

Should I create some kind of wrapper around the Camera (not my favorite solution, would really like to just mock the class...)?

Or, should I use a different mock library then Mockito?

Hope somebody can point me in the right direction.

Complete stacktrace of ExceptionInitializerError

java.lang.ExceptionInInitializerError
at org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:85)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:62)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:56)
at org.mockito.internal.creation.CglibMockMaker.createMock(CglibMockMaker.java:23)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:51)
at org.mockito.Mockito.mock(Mockito.java:1243)
at org.mockito.Mockito.mock(Mockito.java:1120)
at com.cleancode.lifesaver.flashlight.test.FlashLightTests.setUp(FlashLightTests.java:20)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661)
Caused by: java.lang.VerifyError: org/mockito/cglib/core/ReflectUtils
at org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167)
at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
at org.mockito.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:117)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:109)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:105)
at org.mockito.cglib.proxy.Enhancer.<clinit>(Enhancer.java:70)
... 18 more

解决方案

In your stacktrace, notice the substring ".CglibMockMaker": that's the problem here. CGLib doesn't work on android -- there's a plugin for Mockito specifically for android that uses dexmaker, which is like CGLib but works for dalvik. Just search for dexmaker mockito and you should be on the right path.

You still won't be able to mock Camera.open() (the static factory method), but you can refactor your code around that. What matters is that Camera is not a final class; the rest is just awkward plumbing for the test, which you should just accept as the tax for writing well-tested android apps.

这篇关于Android模拟相机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆