我添加了这个条目,因为我认为它可以帮助想要测试他们的 Content Provider 的程序员。
想象一下,您的 Content Provider 被称为 MyProvider,并且您有一个名为 MyProviderContract 的合同类定义了一些常量。
首先,您将编写一个名为的测试类MyProviderTestCase
,它继承自ProviderTestCase2<MyProvider>
. 您必须定义一个将调用构造函数的super
构造函数:
public MyProviderTestCase() {
super(MyProvider.class, MyProviderContract.AUTHORITY);
}
然后,不要直接使用您的提供程序(避免使用getProvider()
您的内容提供程序的用户不会直接访问它),而是使用getMockContentResolver()
获取对内容解析器的引用,然后调用此内容解析器的方法(query
、insert
等) . 在下面的代码中,我展示了如何测试该insert
方法。
public void testInsert() {
Uri uri = MyProviderContract.CONTENT_URI;
ContentValues values = new ContentValues();
values.put(MyProviderContract.FIELD1, "value 1");
values.put(MyProviderContract.FIELD2, "value 2");
Uri resultingUri = getMockContentResolver().insert(uri, values);
// Then you can test the correct execution of your insert:
assertNotNull(resultingUri);
long id = ContentUris.parseId(resultingUri);
assertTrue(id > 0);
}
然后,您可以添加任意数量的测试方法,使用内容解析器而不是直接使用内容提供者,就像内容提供者的用户一样。