AndroidMock gives NoClassDefFoundError

165 views
Skip to first unread message

F41thful

unread,
Dec 15, 2012, 6:34:11 AM12/15/12
to androi...@googlegroups.com
Hi all
I have one project called NewApp and a test project called NewAppTTest. NewAppT project is a test project that is inside NewApp in NewAppTTest folder.
I have followed all the steps in http://android-mock.googlecode.com/files/AndroidMockinEclipse.pdf and I have tried for a lot and reading  a lot of posts.
I resume what I have done:
  1. Right click NewAppT -> properties
  2. Add to project Build Path: /home/javier/lib/android/AndroidMock-1.1.2/AndroidMockGenerator.jar
  3. Check enable project specific settings -> Verify that jave compiler is v1.6 compliance.
  4. Turn on enable annotatin processing and turn off enable processing in editor.
  5. Add two key values
    1. bin_dir: /home/javier/source/android/NewApp/NewAppTTest/bin/ ( I have tested appending classes directory too but no processor log is even created)
    2. logfile: /home/javier/source/android/NewApp/NewAppTTest/processorMock.log

Factory path settings
ANDROID_RUNTIME: /home/javier/bin/android-sdk-linux/platforms/android-17/android.jar
ANDROID_APP_TO_TEST: /home/javier/source/android/NewApp/bin/ (I have tested appending classes dir )
/home/javier/lib/android/AndroidMock-1.1.2/AndroidMockGenerator.jar
ANDROID_MOCK_FRAMEWORK: /home/javier/lib/android/AndroidMock-1.1.2/android_framework_mocks.jar

Test source file
Test source file is in a package en src folder of NewAppT project.

Source Code
public class Test extends SingleLaunchActivityTestCase<MainActivity> {
public Test()
{
super( "com.example.newapp", MainActivity.class );

}

@UsesMocks(Object.class)
public void testSome()
{
Object mock = AndroidMock.createMock( Object.class );
mock.equals( null );
AndroidMock.replay( mock );
AndroidMock.verify( mock );
}
}

To run the test
right click of test file -> run as -> Android JUnit Test

What I expect
I expect that test fails because there is no call made to mock.

What I get
I get the following error to console output:
[2012-12-15 12:14:58 - NewAppT] Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'

If I check logcat output, I can read
12-15 11:14:57.256: E/AndroidRuntime(968): FATAL EXCEPTION: main
12-15 11:14:57.256: E/AndroidRuntime(968): java.lang.NoClassDefFoundError: com.google.android.testing.mocking.UsesMocks

12-15 11:14:57.256: E/AndroidRuntime(968): at java.lang.reflect.Method.getDeclaredAnnotations(Native Method)
12-15 11:14:57.256: E/AndroidRuntime(968): at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:248)
12-15 11:14:57.256: E/AndroidRuntime(968): at java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:199)
12-15 11:14:57.256: E/AndroidRuntime(968): at java.lang.reflect.AccessibleObject.getAnnotation(AccessibleObject.java:207)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.test.suitebuilder.TestMethod.getAnnotation(TestMethod.java:60)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:39)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:30)
12-15 11:14:57.256: E/AndroidRuntime(968): at com.android.internal.util.Predicates$OrPredicate.apply(Predicates.java:106)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:42)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:31)
12-15 11:14:57.256: E/AndroidRuntime(968): at com.android.internal.util.Predicates$NotPredicate.apply(Predicates.java:122)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.test.suitebuilder.TestSuiteBuilder.satisfiesAllPredicates(TestSuiteBuilder.java:254)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:190)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:373)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4218)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.app.ActivityThread.access$3000(ActivityThread.java:125)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.os.Handler.dispatchMessage(Handler.java:99)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.os.Looper.loop(Looper.java:123)
12-15 11:14:57.256: E/AndroidRuntime(968): at android.app.ActivityThread.main(ActivityThread.java:4627)
12-15 11:14:57.256: E/AndroidRuntime(968): at java.lang.reflect.Method.invokeNative(Native Method)
12-15 11:14:57.256: E/AndroidRuntime(968): at java.lang.reflect.Method.invoke(Method.java:521)
12-15 11:14:57.256: E/AndroidRuntime(968): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-15 11:14:57.256: E/AndroidRuntime(968): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-15 11:14:57.256: E/AndroidRuntime(968): at dalvik.system.NativeStart.main(Native Method)
12-15 11:14:57.256: E/AndroidRuntime(968): Caused by: java.lang.ClassNotFoundException: com.google.android.testing.mocking.UsesMocks in loader dalvik.system.PathClassLoader[/system/framework/android.test.runner.jar:/data/app/com.example.newapp.test-1.apk:/data/app/com.example.newapp-2.apk]
12-15 11:14:57.256: E/AndroidRuntime(968): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
12-15 11:14:57.256: E/AndroidRuntime(968): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
12-15 11:14:57.256: E/AndroidRuntime(968): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
12-15 11:14:57.256: E/AndroidRuntime(968): ... 25 more


Output in the processor log
15-dic-2012 12:30:15 - NOTE : Start Processing Annotations
15-dic-2012 12:30:15 - NOTE : Processing [public void testSome() ]
15-dic-2012 12:30:15 - NOTE : Adding Class to Mocking List: java.lang.Object
15-dic-2012 12:30:15 - NOTE : Found 1 classes to mock
15-dic-2012 12:30:15 - NOTE : Fetching mocks of class: java.lang.Object
15-dic-2012 12:30:15 - NOTE : Found 22 mocked classes to save
15-dic-2012 12:30:15 - NOTE : Saving v16.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v16.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v201.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v201.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v231.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v231.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v22.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v22.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v231.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v231.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v233.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v233.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v30.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v30.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v22.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v22.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v40.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v40.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v16.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v16.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v40.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v40.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v30.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v30.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v15.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v15.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v21.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v21.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v31.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v31.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v233.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v233.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v403.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v403.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v403.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v403.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v31.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v31.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v15.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v15.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v201.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v201.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v21.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v21.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Finished Processing Mocks
15-dic-2012 12:30:15 - NOTE : Start Processing Annotations
15-dic-2012 12:30:15 - NOTE : Processing [public void testSome() ]
15-dic-2012 12:30:15 - NOTE : Adding Class to Mocking List: java.lang.Object
15-dic-2012 12:30:15 - NOTE : Found 1 classes to mock
15-dic-2012 12:30:15 - NOTE : Fetching mocks of class: java.lang.Object
15-dic-2012 12:30:15 - NOTE : Found 22 mocked classes to save
15-dic-2012 12:30:15 - NOTE : Saving v16.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v16.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v201.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v201.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v231.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v231.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v22.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v22.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v231.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v231.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v233.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v233.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v30.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v30.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v22.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v22.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v40.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v40.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v16.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v16.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v40.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v40.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v30.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v30.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v15.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v15.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v21.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v21.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v31.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v31.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v233.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v233.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v403.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v403.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v403.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v403.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v31.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v31.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v15.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v15.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving v201.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v201.genmocks.java.lang.ObjectDelegateInterface
15-dic-2012 12:30:15 - NOTE : Saving v21.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Saving via Eclipse v21.genmocks.java.lang.ObjectDelegateSubclass
15-dic-2012 12:30:15 - NOTE : Finished Processing Mocks
15-dic-2012 12:30:15 - NOTE : Start Processing Annotations
15-dic-2012 12:30:15 - NOTE : Processing []
15-dic-2012 12:30:15 - NOTE : Found 0 classes to mock
15-dic-2012 12:30:15 - NOTE : Found 0 mocked classes to save
15-dic-2012 12:30:15 - NOTE : Finished Processing Mocks
15-dic-2012 12:30:15 - NOTE : Start Processing Annotations
15-dic-2012 12:30:15 - NOTE : Processing []
15-dic-2012 12:30:15 - NOTE : Found 0 classes to mock
15-dic-2012 12:30:15 - NOTE : Found 0 mocked classes to save
15-dic-2012 12:30:15 - NOTE : Finished Processing Mocks

I have done several tests and read several posts I don't to know what to do now.

Thanks in advance.
Javier

Sundeep Khandpur

unread,
Dec 16, 2012, 3:28:00 PM12/16/12
to androi...@googlegroups.com
Hi Javier,

You also need to include AndoidMockRuntime.jar in your test project that includes the @UsesMocks class. Read the instructions for why it is needed:

Thanks,
Sundeep

F41thful

unread,
Dec 16, 2012, 8:36:16 PM12/16/12
to androi...@googlegroups.com
Hi Sundeep Khandpur,
I have included the runtime library in two places:
properties -> java build path
java compiler -> Annotation Processing -> Factory Path
But the error is still there.

I am using a test project with is a subproject of the tested project, as Android recommends. I have configurated both, test and tested with the configuration in the instructions. I have configured also the test project.

F41thful

unread,
Dec 23, 2012, 4:13:56 PM12/23/12
to androi...@googlegroups.com
I have included the libraries but the error is still there. Any clues? Also, I want to notice that error is java.lang.NoClassDefFoundError: com.google.android.testing.mocking.UsesMocks. I haven't seen this error in other posts.

ns.trueman

unread,
Jan 7, 2013, 9:17:15 AM1/7/13
to androi...@googlegroups.com
Hi, 
any updates on this topic?
I am also not able to get AndroidMock working with my project, receiving the same error.
I have done all the tricks based on .pdf with instructions, and even more, but still no success.
I have copied "AndroidMockGenerator" and "AndroidMockRuntime" jars into /lib folder for the project, made all changes for Annotation Processor, including specifying "RegenerateFrameworkMocks" set to true. 

When I add simple test like:
----
@UsesMocks(Object.class)
public void testMockObjects() throws ClassNotFoundException {
    Object myMockObject = AndroidMock.createMock(Object.class);
    AndroidMock.expect(myMockObject.toString()).andReturn("Woohoo");
    AndroidMock.replay(myMockObject);
    assertEquals("Woohoo1", myMockObject.toString());
    AndroidMock.verify(myMockObject);
}
----
I see such logs from AndroidMock:
----
Jan 7, 2013 4:09:04 PM - NOTE : Start Processing Annotations
Jan 7, 2013 4:09:04 PM - NOTE : Processing [public void testMockObjects() throws java.lang.ClassNotFoundException]
Jan 7, 2013 4:09:04 PM - NOTE : Adding Class to Mocking List: java.lang.Object
Jan 7, 2013 4:09:04 PM - NOTE : Found 1 classes to mock
Jan 7, 2013 4:09:04 PM - NOTE : Regenerating Framework Mocks on Request
Jan 7, 2013 4:09:04 PM - NOTE : Creating mocks of class: java.lang.Object
Jan 7, 2013 4:09:04 PM - NOTE : Found 2 mocked classes to save
Jan 7, 2013 4:09:04 PM - NOTE : Saving genmocks.java.lang.ObjectDelegateInterface
Jan 7, 2013 4:09:04 PM - NOTE : Saving via Eclipse genmocks.java.lang.ObjectDelegateInterface
Jan 7, 2013 4:09:04 PM - NOTE : Saving genmocks.java.lang.ObjectDelegateSubclass
Jan 7, 2013 4:09:04 PM - NOTE : Saving via Eclipse genmocks.java.lang.ObjectDelegateSubclass
Jan 7, 2013 4:09:04 PM - NOTE : Finished Processing Mocks
Jan 7, 2013 4:09:04 PM - NOTE : Start Processing Annotations
Jan 7, 2013 4:09:04 PM - NOTE : Processing []
Jan 7, 2013 4:09:04 PM - NOTE : Found 0 classes to mock
Jan 7, 2013 4:09:04 PM - NOTE : Regenerating Framework Mocks on Request
Jan 7, 2013 4:09:04 PM - NOTE : Found 0 mocked classes to save
Jan 7, 2013 4:09:04 PM - NOTE : Finished Processing Mocks
----

Any help is appreciated.
--
Sergey N.
Reply all
Reply to author
Forward
0 new messages