【发布时间】:2012-10-14 11:30:31
【问题描述】:
像许多其他人一样,我很高兴听到 Mockito now works with Android 并跟随 this tutorial 亲眼看到它。一切看起来都非常棒,我开始将模拟解决方案整合到我的 Android 测试项目中......
错误
但是,在设置我的应用程序的测试项目以利用 mockito-all-1.9.5、dexmaker-1.0 和 dexmaker-mockito-1.0 jar 时,我在第一个测试用例中遇到了问题。事实上,正是this problem。我需要帮助的部分是;
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)
我被告知这个“还不能完全起作用”,因为堆栈跟踪暗示没有使用 DexMaker jar - 参考 this response。但是,我怀疑我在项目设置方面做错了什么,所以我希望从这里的集体知识库中吸取教训,看看这确实是用户错误还是 beta 错误。
我的 Android 测试项目设置
请在下面找到我的测试项目配置的屏幕截图。该项目是通过 Android 向导创建的,除了在 libs 目录下包含 Mockito 和 DexMaker jar(如上所述)之外,没有其他任何特殊功能。
测试
不管测试的内容(在执行单元测试之前测试失败)设置如下所述;
public class TestSpotRatingCalculator extends InstrumentationTestCase {
@Mock
private AService aService; // Changed the service names being used here - not important.
@Mock
private BService bService;
@Mock
private CService cService;
@Mock
private DService dService;
/**
* @see android.test.AndroidTestCase#setUp()
*/
@Override
protected void setUp() throws Exception {
super.setUp();
MockitoAnnotations.initMocks(this); // Failure here with aforementioned stacktrace...
}
如果有人知道出了什么问题,请在此处发出声音。
【问题讨论】:
-
同意,dexmaker 似乎没有被使用,或者在运行时根本看不到。我不是 Android 开发人员,但这绝对是这里的情况。
-
感谢@Brice - 这方面的任何帮助都很棒,让我有一些东西可以回馈给开发人员。我会向他们指出这个问题和你的评论,看看我们进展如何......
-
只是一个帮助搜索者的说明...如果您尝试在Android 没有 dexmaker 的情况下使用Mockito,也会出现此处描述的错误。在这种情况下,将两个 dexmaker jar 添加到您的
libs/目录并构建类路径。 -
你解决了吗?我有同样的问题stackoverflow.com/questions/24967050/…
标签: android junit mockito cglib dexmaker