2016-10-05 190 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