我已經實現了Content Provider,它從安裝在網絡上的服務中檢索數據。 內容提供商需要從共享偏好所需的參數(用戶憑證,應用程序名稱等)從單元測試中調用getSharedPreferences()時UnsupportedOperationException
SharedPreferences settings = getContext().getSharedPreferences(NET_PREFS, 0);
我使用的單元測試該內容提供商:
public class ResearchProviderTest extends ProviderTestCase2<MyProvider>{
public ResearchProviderTest() {
super(MyProvider.class, MyProvider.CONTENT_AUTHORITY);
}
public void testInsert() {
ContentValues values = new ContentValues();
values.put(QueryFields.FIELD_QUERY_TEXT, "query");
Uri newUri = getMockContentResolver().insert(MyProvider.CONTENT_URI, values);
Cursor readMessagesCursor = getMockContentResolver().query(
newUri ,
new String[] { FIELD_SR_TITLE },
null, null, null);
assertTrue("The cursor should contain some entries", readMessagesCursor.moveToFirst());
}
}
在單元測試的執行。拋出異常:
java.lang.UnsupportedOperationException
at android.test.mock.MockContext.getSharedPreferences(MockContext.java:127)
at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
at com.company.mobile.android.net.RemoteExecutor.retrieveCredentials(RemoteExecutor.java:171)
at com.company.mobile.android.net.service.Adapter.executeSearch(Adapter.java:33)
at com.company.mobile.android.provider.MyProvider.insert(MyProvider.java:167)
at android.content.ContentProvider$Transport.insert(ContentProvider.java:174)
...
有沒有人知道如何將共享首選項傳遞給MockContext?如果在測試Content Provider期間需要Context,我應該使用其他方法嗎?
注射上下文是一個主要問題。我沒有找到注入Context的方法 – Glaxalg 2011-03-15 22:40:09