如何使用JUnit测试Android的源码? [英] How to test Android sqlite with junit?

查看:207
本文介绍了如何使用JUnit测试Android的源码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个简单的Andr​​oid应用程序(的HelloWorld等)的dnow我想补充的操作保存样本数据与mockdao(只是一个列表来管理数据)。今后,我会sqlite的分贝留存数据。

I created a simple Android app (HelloWorld like) an dnow I would add operation to save sample data with mockdao (just a List to manage data). In future, I would persist data in sqlite db.

在Android项目我创建了一个简单的对象结构(任务),并TaskService管理任务的列表。

In Android project I created a simple object structure (a Task) and TaskService to manage list of task.

现在我想创建一个JUnit测试。我读的是更好地创建一个新的项目(Android的测试项目)。
我试图创建一个简单的Andr​​oid测试项目,并增加我的项目这个测试项目。我创建了一个第一JUnit测试基础上,mockdao但WHN我运行该项目,我收到此错误:

Now I want to create a junit test. I read that's better to create a new project (Android Test Project). I tried to create a simple android test project and adding my project to this test project. I created a first junit test based on the mockdao but whn I run the project I received this error :

抛出java.lang.ClassNotFoundException:my.package.TaskServiceTest

java.lang.ClassNotFoundException: my.package.TaskServiceTest

在我的Andr​​oid测试项目,JUnit测试在src / my.package.TaskServiceTest

In my android test project, junit test is in src/my.package.TaskServiceTest

在Eclipse项目的属性,输出文件夹是为斌/班。

In eclipse project properties, output folder is bin/classes for both.

我的Andr​​oid项目是一个Maven项目而不是Android的测试项目。

My Android project is a maven project but not android test project.

你能帮助我吗?

感谢

推荐答案

您应该看一看robolectric:
http://robolectric.org/

You should take a look at robolectric : http://robolectric.org/

这将允许您从一个JUnit的点测试sqllite操作。 Robolectric从开发计算机上您最喜欢的JVM效仿了Android environnment。

This will allow you to test sqllite operation from a junit point of view. Robolectric "emulate" the android environnment from your favorite jvm on your dev machine.

通常情况下,一个测试则是这样的:

Typically, a test then looks like this :

@RunWith(GuiceRobolectricJUnitRunner.class)
public class PhotoDatabaseTest {

    @Inject
    private Context context;

    @Inject
    private SharedPreferences sharedPreferences;

    @Test
    public void dataInsertBaseTest() throws SQLException {
        PhotosUploadDataSource photosUploadDataSource = new PhotosUploadDataSource(context);
        photosUploadDataSource.deleteAll();

        MediaItem mediaItem = new MediaItem();
        mediaItem.setLocation("/test/");
        mediaItem.setName("photo.jpg");
        mediaItem.setSize(5496849);
        mediaItem.setStatus(MediaItem.STATUS_PENDING);
        mediaItem.setType("images/jpg");
        MediaItem resultItem = photosUploadDataSource.createMediaItem(mediaItem);
        assertNotNull(resultItem);
        Utils.displayObject(resultItem);
    }
  } 

GuiceRobolectricJUnitRunner是典型的测试运行JUnit的东西(在这里与吉斯,但你可以做到这一点没有它)。一个有趣的事情是,你可以模拟各种有趣的行为,因为你的数据库没有测试之间持续存在(或者你可以通过实现在@beforeTest一个pre人口)。这里更多:
http://robolectric.org/customizing.html

这篇关于如何使用JUnit测试Android的源码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆