我在哪裏可以找到一個簡單,工作和容易的代碼示例在Android測試與ProviderTestCase2?Android的 - 爲測試代碼示例與ProviderTestCase2
最佳將是一個開放源代碼項目中真正使用它 - 而另一方面,在實際項目的複雜性,可以成爲難以實現的實際功能,所以任何很好的例子是值得歡迎的。 Google Android文檔不是非常具體,不包含任何適當的示例。
我在哪裏可以找到一個簡單,工作和容易的代碼示例在Android測試與ProviderTestCase2?Android的 - 爲測試代碼示例與ProviderTestCase2
最佳將是一個開放源代碼項目中真正使用它 - 而另一方面,在實際項目的複雜性,可以成爲難以實現的實際功能,所以任何很好的例子是值得歡迎的。 Google Android文檔不是非常具體,不包含任何適當的示例。
Android在內部使用它來測試其提供者。有關示例,請參閱here和here。 Google Code Search很適合這個東西:)
在Android SDK記事本示例項目中有一個很好的例子。特別是NotePadProviderTest。只要確保你有通過SDK mamanger安裝的樣本,你就可以走了。
https://開頭的Android。 googlesource.com/platform/development/+/master/samples/NotePad/tests/src/com/example/android/notepad/NotePadProviderTest.java –
在這個例子中我測試一個命名爲「數據層」,存在於被測試的應用程序的ContentProvider;下面,我已經開始測試ContentProvider接口到一個名爲「ActiveUser」的表。
如果有人知道如何使用newResolverWithContentProviderFromSql 請賜教!
package com.example.android.app.test;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.provider.BaseColumns;
import android.test.ProviderTestCase2;
import android.test.mock.MockContentResolver;
import android.util.Log;
import com.example.android.app.Constants;
import com.example.android.app.DataLayer;
import com.example.android.app.provider.contract.ActiveUserContract;
public class DataLayerTests extends ProviderTestCase2<DataLayer> {
private static final String TAG = DataLayerTests.class.getSimpleName();
MockContentResolver mMockResolver;
public DataLayerTests() {
super(DataLayer.class, Constants.DATA_LAYER_AUTHORITY);
}
@Override
protected void setUp() throws Exception {
super.setUp();
Log.d(TAG, "setUp: ");
mMockResolver = getMockContentResolver();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
Log.d(TAG, "tearDown:");
}
public void testActiveUserInsert__inserts_a_valid_record() {
Uri uri = mMockResolver.insert(ActiveUserContract.CONTENT_URI, getFullActiveUserContentValues());
assertEquals(1L, ContentUris.parseId(uri));
}
public void testActiveUserInsert__cursor_contains_valid_data() {
mMockResolver.insert(ActiveUserContract.CONTENT_URI, getFullActiveUserContentValues());
Cursor cursor = mMockResolver.query(ActiveUserContract.CONTENT_URI, null, null, new String[] {}, null);
assertNotNull(cursor);
assertEquals(1, cursor.getCount());
assertTrue(cursor.moveToFirst());
assertEquals(VALID_USERNAME, cursor.getString(cursor.getColumnIndex(ActiveUserContract.Columns.USERNAME)));
assertEquals(VALID_COMPANY_CODE, cursor.getString(cursor.getColumnIndex(ActiveUserContract.Columns.COMPANY_CODE)));
assertEquals(VALID_COMPANY_LETTER, cursor.getString(cursor.getColumnIndex(ActiveUserContract.Columns.COMPANY_LETTER)));
assertEquals(VALID_DRIVER_CODE, cursor.getString(cursor.getColumnIndex(ActiveUserContract.Columns.DRIVER_CODE)));
assertEquals(VALID_SITE_NUMBER, cursor.getString(cursor.getColumnIndex(ActiveUserContract.Columns.SITE_NUMBER)));
assertEquals(VALID_FIRST_NAME, cursor.getString(cursor.getColumnIndex(ActiveUserContract.Columns.FIRST_NAME)));
assertEquals(VALID_SURNAME, cursor.getString(cursor.getColumnIndex(ActiveUserContract.Columns.SURNAME)));
}
public void testActiveUserInsert__throws_SQLiteConstraintException_when_NOT_NULL_constraint_not_met() {
try {
mMockResolver.insert(ActiveUserContract.CONTENT_URI, getActiveUserContentValuesWithNullCompanyCode());
fail("SQLiteConstraintException should have been thrown!");
} catch (SQLiteConstraintException e) {
assertEquals("active_user.comp_code may not be NULL (code 19)", e.getMessage());
}
}
/** @return a ContentValues object with a value set for each ActiveUser column */
public static ContentValues getFullActiveUserContentValues() {
ContentValues v = new ContentValues(7);
v.put(ActiveUserContract.Columns.USERNAME, VALID_USERNAME);
v.put(ActiveUserContract.Columns.COMPANY_CODE, VALID_COMPANY_CODE);
v.put(ActiveUserContract.Columns.COMPANY_LETTER, VALID_COMPANY_LETTER);
v.put(ActiveUserContract.Columns.DRIVER_CODE, VALID_DRIVER_CODE);
v.put(ActiveUserContract.Columns.SITE_NUMBER, VALID_SITE_NUMBER);
v.put(ActiveUserContract.Columns.FIRST_NAME, VALID_FIRST_NAME);
v.put(ActiveUserContract.Columns.SURNAME, VALID_SURNAME);
return v;
}
public static ContentValues getActiveUserContentValuesWithNullCompanyCode() {
ContentValues v = new ContentValues(7);
v.put(ActiveUserContract.Columns.USERNAME, VALID_USERNAME);
v.putNull(ActiveUserContract.Columns.COMPANY_CODE);
v.put(ActiveUserContract.Columns.COMPANY_LETTER, VALID_COMPANY_LETTER);
v.put(ActiveUserContract.Columns.DRIVER_CODE, VALID_DRIVER_CODE);
v.put(ActiveUserContract.Columns.SITE_NUMBER, VALID_SITE_NUMBER);
v.put(ActiveUserContract.Columns.FIRST_NAME, VALID_FIRST_NAME);
v.put(ActiveUserContract.Columns.SURNAME, VALID_SURNAME);
return v;
}
private static final String VALID_SURNAME = "Brin";
private static final String VALID_FIRST_NAME = "Sergey";
private static final String VALID_SITE_NUMBER = "9";
private static final String VALID_DRIVER_CODE = "SergB201";
private static final String VALID_COMPANY_LETTER = "G";
private static final String VALID_COMPANY_CODE = "GOOGLE!";
private static final String VALID_USERNAME = "123456";
}
是啊,這地方挺好的。其實到底很簡單,如果你有正確的榜樣;) – Henning
鏈接現在:-(打破 – harmanjd
我猜,因爲@ harmanjd的評論,他們已經進行了更新,他們此刻做工精細 – npace