Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android内容提供商测试真正的内容提供商_Java_Android_Junit_Android Contentprovider - Fatal编程技术网

Java Android内容提供商测试真正的内容提供商

Java Android内容提供商测试真正的内容提供商,java,android,junit,android-contentprovider,Java,Android,Junit,Android Contentprovider,希望你能帮助我 tl:dr 我如何编写JUnit测试,而不是使用类IsolatedContext和MockContentResolver我想影响真正的内容提供者,而不是模拟数据库 概述 我必须在工作中为一个特殊的ContentProvider编写JUnit测试。 此内容提供商连接到一些不同的硬件,并在那里设置一些值我必须检查硬件值和内容提供商数据库的值。 构造 ->内容提供者->硬件接口->硬件->硬件接口->内容提供者 代码 public class DataLayerTests extend

希望你能帮助我

tl:dr
我如何编写JUnit测试,而不是使用类IsolatedContextMockContentResolver
我想影响真正的内容提供者,而不是模拟数据库

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

构造
->内容提供者->硬件接口->硬件->硬件接口->内容提供者

代码

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));
}}
公共类DataLayerTests扩展了ProviderTestCase2{
私有静态最终字符串标记=DataLayerTests.class.getSimpleName();
MockContentResolver mMockResolver;
公共数据层测试(){
super(DataLayer.class、Constants.DATA\u LAYER\u AUTHORITY);
}
@凌驾
受保护的void setUp()引发异常{
super.setUp();
Log.d(标记“setUp:”);
mMockResolver=getMockContentResolver();
}
@凌驾
受保护的void tearDown()引发异常{
super.tearDown();
Log.d(标签“拆卸:”);
}
公共无效测试活动序列插入有效记录(){
Uri Uri=mMockResolver.insert(ActiveUserContract.CONTENT_Uri,getFullActiveUserContentValues());
assertEquals(1L,ContentUris.parseId(uri));
}}

真实的数据库应该受到影响,同时也应该使用真实的ContentRescolver。 我怎样才能做到这一点呢?

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

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

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


如果你想在真实的手机中进行测试,你应该查看一下

谢谢回复,我已经用一个按钮制作了一个真实的应用程序。该应用程序将影响真实数据库。下次我会检查Robolectric。