Android内容提供商测试REAL内容提供商

时间:2016-10-05 14:24:46

标签: java android junit android-contentprovider

希望你能帮助我...

TL:博士
我如何编写 NOT 使用 IsolatedContext MockContentResolver 类的JUnit测试?
我想影响REAL内容提供者而不是模拟数据库。

一般
我必须在工作中为特殊的ContentProvider编写JUnit测试。 此内容提供程序连接到某些不同的硬件并设置一些值。
我必须检查内容提供商数据库的硬件值和值。

构建
- > ContentProvider - >硬件接口 - >硬件 - > HardwareInterface-> ContentProvider

代码

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


应该影响真正的数据库以及应该使用Real ContentRescolver。 我怎么能这样呢?

1 个答案:

答案 0 :(得分:1)

您可以使用Robolectric来测试真正的内容提供程序,从而影响真正的sqlite数据库。

Robolectric是Android框架的一个实现,可以在任何JVM中运行,因此可以用于测试。

请注意,sqlite数据库将存在于计算机上的临时文件夹中,而不是电话或模拟器上。

如果您希望测试在真实手机中进行,您应该查看Instrumented tests