Android 对ContentProvider执行检测测试

Android 对ContentProvider执行检测测试,android,android-contentprovider,junit4,android-instrumentation,Android,Android Contentprovider,Junit4,Android Instrumentation,假设我的ContentProvider称为DogProvider。如何设置仪器测试框架?当我尝试运行以下程序时,我总是得到一个空MockContentResolver import org.junit.Test; import org.junit.runner.RunWith; import android.content.ContentProvider; import android.database.Cursor; import android.net.Uri; import androi

假设我的ContentProvider称为DogProvider。如何设置仪器测试框架?当我尝试运行以下程序时,我总是得到一个空MockContentResolver

import org.junit.Test;
import org.junit.runner.RunWith;

import android.content.ContentProvider;
import android.database.Cursor;
import android.net.Uri;
import android.support.test.runner.AndroidJUnit4;
import android.support.test.filters.LargeTest;
import android.test.ProviderTestCase2;
import android.support.test.InstrumentationRegistry;
import android.test.mock.MockContentResolver;

import com.bus.proj.data.DogContract;
import com.bus.proj.data.DogProvider;

@RunWith(AndroidJUnit4.class)
@LargeTest
public class ContentProviderTest extends ProviderTestCase2<DogProvider>{

    public ContentProviderTest() {
        super(DogProvider.class, DogContract.CONTENT_AUTHORITY);
    }

    @Override
    protected void setUp() throws Exception{
        setContext(InstrumentationRegistry.getTargetContext());
        super.setUp();
    }

    @Test
    public void emptyQuery(){
        MockContentResolver contentResolver = getMockContentResolver();
        assertNotNull(contentResolver);//fail happens here
        Uri uri = DogContract.DogEntry.CONTENT_URI;
        Cursor cursor = contentResolver.query(uri,null,null,null,null);
    }

}
import org.junit.Test;
导入org.junit.runner.RunWith;
导入android.content.ContentProvider;
导入android.database.Cursor;
导入android.net.Uri;
导入android.support.test.runner.AndroidJUnit4;
导入android.support.test.filters.LargeTest;
导入android.test.ProviderTestCase2;
导入android.support.test.InstrumentationRegistry;
导入android.test.mock.MockContentResolver;
导入com.bus.proj.data.DogContract;
导入com.bus.proj.data.DogProvider;
@RunWith(AndroidJUnit4.class)
@最大的
公共类ContentProviderTest扩展了ProviderTestCase2{
公共内容提供者测试(){
super(DogProvider.class、DogContract.CONTENT\u AUTHORITY);
}
@凌驾
受保护的void setUp()引发异常{
setContext(InstrumentationRegistry.getTargetContext());
super.setUp();
}
@试验
public void emptyQuery(){
MockContentResolver contentResolver=getMockContentResolver();
assertNotNull(contentResolver);//此处发生失败
Uri Uri=DogContract.DogEntry.CONTENT\u Uri;
Cursor Cursor=contentResolver.query(uri,null,null,null);
}
}

在测试中,您使用的是基于注释的
AndroidJunit4
测试运行程序(与基于方法名称的JUnit3相比)

这意味着您的安装方法可能未被调用。为了在每次测试之前调用它,您需要使用@before注释,并公开您的方法:

@Before
@Override 
public void setUp() throws Exception{
    setContext(InstrumentationRegistry.getTargetContext());
    super.setUp(); 
}