package jp.mixi.sample.test.test;
import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.ProviderInfo;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.test.MoreAsserts;
import android.test.mock.MockContentProvider;
import android.test.mock.MockContentResolver;
import android.test.mock.MockContext;
import jp.mixi.sample.test.SampleTestTarget3;
import jp.mixi.sample.test.TestTargetContentProvider;
import jp.mixi.sample.test.entity.SampleDBEntity;
import java.util.List;
public class SampleTestTarget3TestCase extends AndroidTestCase {
public void testGetAllList() throws Exception {
SampleTestTarget3 target = new SampleTestTarget3();
List<SampleDBEntity> list = target.getAllListFromDB(new SampleMockContext(getContext()));
assertNotNull(list);
MoreAsserts.assertNotEmpty(list);
assertEquals(3, list.size());
{
SampleDBEntity entity = list.get(0);
assertEquals(1, entity.getId());
assertEquals("KeithYokoma", entity.getName());
}
{
SampleDBEntity entity = list.get(1);
assertEquals(2, entity.getId());
assertEquals("HogeFugao", entity.getName());
}
{
SampleDBEntity entity = list.get(2);
assertEquals(3, entity.getId());
assertEquals("HiyoHiyo", entity.getName());
}
}
// モックの本体。ContentProvider そのものをモックしてしまう。
// モックしたいメソッドを適宜オーバライドすること。
private static class SampleMockContentProvider extends MockContentProvider {
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
// クエリ結果のモック作成
// MatrixCursor を用いてデータをモックする
MatrixCursor cursor = new MatrixCursor(projection);
cursor.addRow(new String[] {"1", "KeithYokoma"});
cursor.addRow(new String[] {"2", "HogeFugao"});
cursor.addRow(new String[] {"3", "HiyoHiyo"});
return cursor;
}
@Override
public void attachInfo(Context context, ProviderInfo info) {
}
}
private static class SampleMockContentResolver extends MockContentResolver {
public SampleMockContentResolver(Context context) {
// モックの ContentProvider へアクセスしに行くよう設定する
ContentProvider provider = new SampleMockContentProvider();
// AndroidManifest に記述する ContentProvider の宣言をここで動的に行う
ProviderInfo info = new ProviderInfo();
info.authority = TestTargetContentProvider.AUTHORITY;
info.enabled = true;
info.packageName = TestTargetContentProvider.class.getPackage().getName();
provider.attachInfo(context, info);
// ContentProvider を追加する
addProvider(TestTargetContentProvider.AUTHORITY, provider);
}
}
private static class SampleMockContext extends MockContext {
private Context mContext;
public SampleMockContext(Context context) {
mContext = context;
}
@Override
public ContentResolver getContentResolver() {
return new SampleMockContentResolver(mContext);
}
}
}