Cannot load project defined classes

107 views
Skip to first unread message

Andrew Budker

unread,
Jan 20, 2012, 8:39:21 PM1/20/12
to Android Mock Discussion
Hi,

I'm seeing a similar issue to some other people on this group when I
try and mock classes which I have defined in my Android Project (I can
successfully mock the Object.class).

Here is the output:

Jan 20, 2012 5:37:05 PM - NOTE : Start Processing Annotations
Jan 20, 2012 5:37:05 PM - NOTE : Processing [public void doATest() ]
Jan 20, 2012 5:37:05 PM - NOTE : Adding Class to Mocking List:
com.abudker.dexit.Dependency
Jan 20, 2012 5:37:05 PM - ERROR : Could not find
com.abudker.dexit.Dependency
Jan 20, 2012 5:37:05 PM - ERROR : java.lang.ClassNotFoundException:
com.abudker.dexit.Dependency
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at
com.google.android.testing.mocking.UsesMocksProcessor.findClassesToMock(UsesMocksProcessor.java:
170)
at
com.google.android.testing.mocking.UsesMocksProcessor.getClassesToMock(UsesMocksProcessor.java:
116)
at
com.google.android.testing.mocking.UsesMocksProcessor.process(UsesMocksProcessor.java:
75)
at
org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:
139)
at
org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:
121)
at
org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:
159)
at
org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:
134)
at
org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:
813)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:
432)
at
org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:
364)
at
org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:
178)
at
org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:
301)
at
org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:
60)
at
org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:
254)
at
org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:
173)
at org.eclipse.core.internal.events.BuildManager
$2.run(BuildManager.java:728)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:
199)
at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:
239)
at org.eclipse.core.internal.events.BuildManager
$1.run(BuildManager.java:292)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:
295)
at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:
256)
at
org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:
394)
at org.eclipse.core.internal.resources.Project$1.run(Project.java:
618)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:
2344)
at
org.eclipse.core.internal.resources.Project.internalBuild(Project.java:
597)
at org.eclipse.core.internal.resources.Project.build(Project.java:
114)
at org.eclipse.jdt.internal.ui.util.CoreUtility
$BuildJob.run(CoreUtility.java:161)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

Jan 20, 2012 5:37:05 PM - NOTE : Known Classpath:
Jan 20, 2012 5:37:06 PM - NOTE : file:/Users/abudker/Documents/
workspace/android-mock/bin/AndroidMockGenerator.jar
Jan 20, 2012 5:37:06 PM - NOTE : file:/Users/abudker/Documents/
workspace/android-mock/bin/android_framework_mocks.jar
Jan 20, 2012 5:37:06 PM - NOTE : file:/Users/abudker/android-sdk/
platforms/android-14/android.jar
Jan 20, 2012 5:37:06 PM - NOTE : file:/Users/abudker/Documents/
workspace/DexItTest/bin/
Jan 20, 2012 5:37:06 PM - NOTE : file:/Users/abudker/Documents/
workspace/DexIt/bin/
Jan 20, 2012 5:37:06 PM - NOTE : Found 0 classes to mock
Jan 20, 2012 5:37:06 PM - NOTE : Found 0 mocked classes to save
Jan 20, 2012 5:37:06 PM - NOTE : Finished Processing Mocks

Any thoughts?

Sundeep Khandpur

unread,
Jan 20, 2012, 10:08:58 PM1/20/12
to androi...@googlegroups.com
Hi Andrew,

I think the annotation processor is not able to find com.abudker.dexit.Dependency. Please ensure you have followed the instructions in http://android-mock.googlecode.com/files/AndroidMockinEclipse.pdf correctly.
Also, try to add the path to com.abudker.dexit.Dependency explicitly under "Factory Path" (as shown in the AndroidMockinEclipse.pdf) and check if it still complains.
--
Thanks.
--Sundeep

Andrew Budker

unread,
Jan 20, 2012, 10:28:20 PM1/20/12
to androi...@googlegroups.com
Hi,

I followed the instructions contained in that pdf (and also found the discussion noting that it was out of date). I have tried to set this up several times from scratch and i see the same issue over and over again. There are two problems:

1. Android-mock doesn't seem to know about the classes defined by the application under test if you specify the bin directory. (Turns out the instructions are wrong and if you set a factory path pointing to AppUnderTest/bin/classes this works)

2. When i actually deploy the tests, I fail to load the mocks that I have generated (the instructions for setting it up in eclipse mention downloading the AndroidMockRuntime, but never actually use include it in the apk). I have tried setting the AndroidRuntime, and the AndroidGenerator as exported and I see the same result for both custom objects and android objects. 

Example stack trace:

java.lang.RuntimeException: Could not find mock for java.lang.Object  -- Make sure to run the MockGenerator.jar on your test jar, and to build the Android test APK using the modified jar created by MockGenerator
at com.google.android.testing.mocking.AndroidMock.getInterfaceFor(AndroidMock.java:2790)
at com.google.android.testing.mocking.AndroidMock.createMock(AndroidMock.java:187)
at com.google.android.testing.mocking.AndroidMock.createMock(AndroidMock.java:157)
at com.abudker.dexit.eclair.test.DexTest.doAObjectTest(DexTest.java:19)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:537)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1551)
Caused by: java.lang.ClassNotFoundException: genmocks.java.lang.ObjectDelegateInterface
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:217)
at java.lang.Class.forName(Class.java:172)
at com.google.android.testing.mocking.AndroidMock.getInterfaceFor(AndroidMock.java:2788)
... 15 more
Caused by: java.lang.NoClassDefFoundError: genmocks/java/lang/ObjectDelegateInterface
... 19 more
Caused by: java.lang.ClassNotFoundException: genmocks.java.lang.ObjectDelegateInterface
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
... 19 more

Sundeep Khandpur

unread,
Jan 20, 2012, 10:46:38 PM1/20/12
to androi...@googlegroups.com
Hi Andrew,

I am glad you figured out #1. The instructions are old and need to be updated. I think it was with ADT 14.0 update after which the android project bin directory was changed to bin/classes.

For #2, Please make sure that <TEST_PROJECT_FOLDER>/bin/classes is set as the bin_dir. That will ensure the generated mocks are saved to .../bin/classes directory and package with your APK.
--
Thanks.
--Sundeep

Reply all
Reply to author
Forward
0 new messages