Java 如何使用junit测试Android sqlite?

Java 如何使用junit测试Android sqlite?,java,android,eclipse,sqlite,junit,Java,Android,Eclipse,Sqlite,Junit,我创建了一个简单的Android应用程序(类似HelloWorld),它是一个dnow,我将添加操作来使用mockdao保存样本数据(只是一个管理数据的列表)。将来,我将在sqlite数据库中持久化数据 在Android项目中,我创建了一个简单的对象结构(任务)和TaskService来管理任务列表 现在我想创建一个junit测试。我读到最好创建一个新项目(Android测试项目)。 我试图创建一个简单的android测试项目,并将我的项目添加到此测试项目中。我基于mockdao创建了第一个ju

我创建了一个简单的Android应用程序(类似HelloWorld),它是一个dnow,我将添加操作来使用mockdao保存样本数据(只是一个管理数据的列表)。将来,我将在sqlite数据库中持久化数据

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

现在我想创建一个junit测试。我读到最好创建一个新项目(Android测试项目)。 我试图创建一个简单的android测试项目,并将我的项目添加到此测试项目中。我基于mockdao创建了第一个junit测试,但在运行项目时收到以下错误:

java.lang.ClassNotFoundException:my.package.TaskServiceTest

在我的android测试项目中,junit测试位于src/my.package.TaskServiceTest中

在eclipse项目属性中,输出文件夹为bin/classes

我的Android项目是一个maven项目,但不是Android测试项目

你能帮我吗


谢谢

您应该看看robolectric:

这将允许您从junit的角度测试sqllite操作。Robolectric在您的开发机器上从您最喜欢的jvm“模拟”android环境

通常,测试如下所示:

@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);
    }
  } 
guicerobelectricjunitrunner是您典型的测试运行程序junit(这里有guice,但您可以不用它)。有趣的一点是,您可以模拟各种有趣的行为,因为您的数据库在测试之间不会持久存在(或者您可以通过在@beforeTest中实现预填充)。详情如下: