希望你能帮我 ...
tl:dr
我如何编写不使用IsolatedContext和MockContentResolver类的JUnit测试?我想影响REAL内容提供程序,而不是Mock数据库。
一般
我必须为工作中的特殊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。
我怎么能解决这个问题?

最佳答案

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

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

请注意,sqlite数据库将位于计算机上的临时文件夹中,而不位于电话或仿真器中。

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

09-13 11:08