IsolatedContextの記事を書こうとしらProviderTestCase2の事を書いてなかった事に気づいたので書いておく。
■コード
public class ProviderTest extends ProviderTestCase2<Provider> { private Provider mProvider; private Uri mAuthority; public ProviderTest() { super(Provider.class, ""); } @Override protected void setUp() throws Exception { super.setUp(); mProvider = getProvider(); mAuthority = Provider.URI; } @Override protected void tearDown() throws Exception { super.tearDown(); mProvider = null; mAuthority = null; } public void testOnCreate() { assertFalse(mProvider.onCreate()); } public void testGetType() { assertEquals(mProvider.getType(Provider.URI), null); } public void test1Insert() { String key = "key1"; String value = "value1"; ContentValues values = new ContentValues(); values.put("key", key); values.put("value", value); Uri result = mProvider.insert(mAuthority, values); assertEquals(mAuthority, result); Cursor cursor = mProvider.query( mAuthority, new String[]{"_id", "key", "value"}, "`key` = ?", new String[]{key}, null ); assertTrue(cursor.moveToFirst()); assertTrue(0 < cursor.getCount()); assertEquals(cursor.getString(cursor.getColumnIndex("key")), key); assertEquals(cursor.getString(cursor.getColumnIndex("value")), value); cursor.close(); } public void test2Update() { String key = "key1"; String value = "valuevalue"; ContentValues values = new ContentValues(); values.put("key", key); values.put("value", value); int row = mProvider.update( mAuthority, values, "`key` = ?", new String[]{key} ); assertTrue(0 < row); Cursor cursor = mProvider.query( mAuthority, new String[]{"_id", "key", "value"}, "`key` = ?", new String[]{key}, null ); assertTrue(cursor.moveToFirst()); assertTrue(0 < cursor.getCount()); assertEquals(cursor.getString(cursor.getColumnIndex("key")), key); assertEquals(cursor.getString(cursor.getColumnIndex("value")), value); cursor.close(); } public void test3Delete() { String key = "key1"; int row = mProvider.delete(mAuthority, "`key` = ?", new String[]{key}); assertTrue(row > 0); } }
ProviderTestCase2のコンストラクタがIsolatedContextオブジェクトを生成し、production環境とは別の環境で実行される。メソッドの実行順序を指定しているのが良くない。