Robolectric
provides a simple approach to automate unit test case for android by using
standard JUnit tests. It runs on any JVM, without needing the emulator or a
device.
Advantages of Roboelectric:
No Mocking
Frameworks Required
Run Tests Outside of the Emulator
Test Annotations
@RunWith
To run your test with Robolectric, you need to tell JUnit using the @RunWith
annotation on your test
class:
@RunWith (RobolectricTestRunner.class)
// required for Robolectric!
For more details: http://pivotal.github.io/robolectric/user-guide.htmlWith Robolectric, we can write a small unit test for custom content provide like this.
@RunWith(RobolectricTestRunner.class) public class BookContentProviderTest { private Activity activity; private BookProvider bookProvider; private ContentResolver contentResolver; public static final String AUTHORITY = "com.test.provider.Book"; public static final String BOOK_TABLE_NAME = "book"; /** * The columns we are interested in from the database */ public static final String[] BOOK_PROJECTION = new String[] { BookColumns._ID, // 0 BookColumns.BOOK_NAME, // 1 }; public static final Uri BOOK_URI = Uri.parse("content://" + AUTHORITY + "/" + BOOK_TABLE_NAME); private String[] bookList = new String[] { "angels and demons", "Book1", "Book2", "Book3" }; @Before public void setUp() throws Exception { bookProvider = new BookProvider(); activity = new Activity(); contentResolver = activity.getContentResolver(); bookProvider.onCreate(); ShadowContentResolver.registerProvider(AUTHORITY, bookProvider); } @Test public void testContentProvider() { insertBook(new Book("53bfc0b980b0", "angels and demons")); insertBook(new Book("53bfc0b980b3", "Book1")); insertBook(new Book("53bfc0b980b1", "Book2")); insertBook(new Book("53bfc0b980b2", "Book3")); Cursor cursor = contentResolver.query(BOOK_URI, BOOK_PROJECTION, null, null, BookColumns.DEFAULT_SORT_ORDER); cursor.moveToFirst(); Assert.assertTrue(cursor.getCount() == 4); if (cursor.getCount() != 0) { do { Assert.assertEquals(bookList[cursor.getPosition()], cursor.getString(cursor .getColumnIndex(BookColumns.BOOK_NAME))); } while (cursor.moveToNext()); } } private void insertBook(Book book) { contentResolver.insert(BOOK_URI, getContentValue(book)); } private ContentValues getContentValue(Book book) { ContentValues values; values = new ContentValues(); values.put(BookColumns._ID, book.getBookId()); values.put(BookColumns.BOOK_NAME, book.getName()); return values; } }