执行 ContentProvider 的仪器测试
Perform instrumentation testing of ContentProvider
假设我的 ContentProvider 叫做 DogProvider。如何设置我的 Instrumentation 测试框架?当我尝试 运行 以下内容时,我总是以空 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);
}
}
在您的测试中,您使用的是 AndroidJunit4
测试运行程序,它基于注释(与基于方法名称的 JUnit3 相比)。
这意味着您的 setUp 方法可能没有被调用。为了在每次测试之前调用它,您需要使用 @Before 注释,并使您的方法 public :
@Before
@Override
public void setUp() throws Exception{
setContext(InstrumentationRegistry.getTargetContext());
super.setUp();
}
假设我的 ContentProvider 叫做 DogProvider。如何设置我的 Instrumentation 测试框架?当我尝试 运行 以下内容时,我总是以空 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);
}
}
在您的测试中,您使用的是 AndroidJunit4
测试运行程序,它基于注释(与基于方法名称的 JUnit3 相比)。
这意味着您的 setUp 方法可能没有被调用。为了在每次测试之前调用它,您需要使用 @Before 注释,并使您的方法 public :
@Before
@Override
public void setUp() throws Exception{
setContext(InstrumentationRegistry.getTargetContext());
super.setUp();
}