2016-10-05 247 views
1

希望你能幫助我...

TL:博士
我怎麼能寫JUnit測試將使用類IsolatedContextMockContentResolver
我想影響REAL內容提供者而不是模擬數據庫。

通用
我必須爲工作中的特殊ContentProvider編寫JUnit測試。 此內容提供商連接到一些不同的硬件並設置一些值。
我必須檢查硬件值和內容提供者數據庫的值。

建設
- >的ContentProvider - >硬件界面 - >硬件 - > HardwareInterface->的ContentProvider

代碼Android內容提供商測試的真正內容提供商

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)); 
}} 


真實的數據庫應該不會受到影響,以及實應使用ContentRescolver。 我怎麼能這樣?

回答

1

您可以使用Robolectric測試真正的內容提供者,會影響實際的SQLite數據庫。

Robolectric是Android框架,可以在任何JVM運行,並因此可用於測試的實現。

請注意,SQLite數據庫將生活在一個臨時文件夾在您的計算機上,而不是在手機或模擬器。

如果你想測試一個真正的手機裏面發生,你應該看看Instrumented tests

+0

感謝您的回覆,我 已經做了一個按鈕,一個真正的應用程序。 該應用程序將影響真實的數據庫。 下次我會檢查Robolectric。 – MatzunaTata