2011-04-29 58 views
7

我已经写了应该换一个SqlLite数据库访问2代表我的内容提供商定制的ContentProvider。现在我想写一些测试用例,但我从来没有这样做过。在阅读开发者指南的章节后,我必须说我没有设法得到任何测试。测试Android中

下面是我到目前为止的代码。这是测试项目中唯一对应于我的主项目的类。当我在Eclipse中执行它时,仿真程序启动正确,软件包已安装,但未运行测试:

测试运行失败:测试运行不完整。 预计1次测试中,获得0

下面是测试类:

public class ArticleProviderTest extends ProviderTestCase2<ArticleProvider> { 

    static final Uri[] validUris = new Uri[] { Articles.CONTENT_URI, 
     Pictures.CONTENT_URI, 
     Pictures.getContentUriForArticleId(1) }; 

    public ArticleProviderTest(Class<ArticleProvider> providerClass, String providerAuthority) { 
     super(providerClass, providerAuthority); 
    } 

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

    public void testQuery() { 
     ContentProvider provider = getProvider();  
     for (Uri uri : validUris) { 
      Cursor cursor = provider.query(uri, null, null, null, null); 
      assertNotNull(cursor); 
     }  
    } 
} 

而且清单文件,如果它可以帮助:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="fr.marvinlabs.xxxx" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="7" /> 
    <instrumentation android:targetPackage="fr.marvinlabs.xxxx" android:name="android.test.InstrumentationTestRunner" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <uses-library android:name="android.test.runner" /> 
    </application> 
</manifest> 

当我在调试配置推出,构造函数和setUp中的断点不会被触发。 ?!

我也没有在网络上找到很多信息。任何人都可以帮助我理解如何设置测试(基本上创建测试数据库文件,填充一些数据,查询它,...)?

回答

7

好,知道了。错误是我没有提供测试类的默认构造函数。我已经重写了错误的构造函数:

public ArticleProviderTest(Class<ArticleProvider> providerClass, String providerAuthority) { 
    super(providerClass, providerAuthority); 
} 

现在

public ArticleProviderTest() { 
    super(ArticleProvider.class, "com.blah.azerty"); 
} 

凌晨2时的时候,你不能阅读文档完全好,下午好:)

2

你应该实现在您创建和删除数据库setUp()tearDown()方法。

这是一个很好的例子:http://www.google.com/codesearch/p?hl=en#IrmxZtZAa8k/tests/src/com/android/providers/calendar/CalendarProvider2Test.java

+0

的ArticleProviderTest类的设置方法不叫,甚至没有构造函数。 – 2011-04-30 15:03:19

+0

我编辑了问题并添加了清单。我需要设置除Provider提供程序测试类以外的其他任何内容吗?任何活动呢? – 2011-04-30 15:09:06

+4

上面的CalendarProvider2Test.java链接已损坏。这一个似乎工作:https://android.googlesource.com/platform/packages/providers/CalendarProvider/+/refs/heads/jb-dev/tests/src/com/android/providers/calendar/CalendarProvider2Test.java – treejanitor 2013-05-07 12:05:35

3

我在发现NotePadProviderTest.java由SDK提供的NotePad示例项目是一个很好的开始。