2. Outline
• What's Mock Object ?
• Popular Mock libraries.
• Why using AndroidMock ?
• Example
• Use AndroidMock in app
• Use AndroidMock in system service
3. What's Mock Object ?
• A simulated objects that mimic the behavior of
real objects in controlled ways.
• Usually used in Unit Test Framework.
o Used to do the isolation test.
• Java has many popular mock libraries such as
EasyMock, JMock ... etc.
• Android also has its mock library called
AndroidMock.
4. Popular mock libraries
• EasyMock
o Java
o EasyMock 3.1 has the feature for Class Mocking
• JMock
o Java Mock Library
• moQ
o .NET
Interface Class
+
• Google Mock
Mocking Mocking
o C++
5. Why using AndroidMock ?
• Dalvik VM is limited for supporting mocking.
• EasyMock only can support interface mocking
in Dalvik VM even it has realized the class
mocking.
• AndroidMock is based on EasyMock.
• AndoirdMock's class mocking is achieved by
o Interface Mocking to EasyMock
o Use annotation to generate the helper class
6. Example
package com.google.android.testing.mocktest.test;
import com.google.android.testing.mocking.AndroidMock;
public class MockingTest extends TestCase {
@UsesMocks(ClassToMock.class) 1. pre-generate the helper class for AndroidMock
public void testMocks() throws ClassNotFoundException {
ClassToMock myMockObject = 2. create a mock object
AndroidMock.createMock(ClassToMock.class);
AndroidMock.expect(myMockObject.getString()).andReturn("Woohoo");
AndroidMock.expect(myMockObject.getNextInt(2)).andReturn(42); 3. record behavior
AndroidMock.replay(myMockObject); 4. replay the behavior
assertEquals("Woohoo", myMockObject.getString());
assertEquals(42, myMockObject.getNextInt(2)); 5. test
AndroidMock.verify(myMockObject);
6. verified whether all the record behaviors are executed
}
}
8. Limitation for AndroidMock( EasyMock)
• It can't mock final method.
o If it mocks, it will execute the origin logic.
• It can't mock static method.
o If it mocks, it will execute the origin logic.
• It can't mock private method.
o If it mocks, it will execute the origin logic.
• some special methods can't be mocked
o equals()
o toString()
o hashCode()