我创建了一个简单的Android应用程序(像HelloWorld之类的),但现在我会添加操作以使用嘲讽(仅用于管理数据的列表)保存示例数据。将来,我会将数据保留在sqlite db中。

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

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

java.lang.ClassNotFoundException:my.package.TaskServiceTest

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

在eclipse项目属性中,两者的输出文件夹均为bin / classs。

我的Android项目是一个Maven项目,但不是android测试项目。

你可以帮帮我吗 ?

谢谢

最佳答案

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

这将允许您从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);
    }
  }


GuiceRobolectricJUnitRunner是典型的测试运行器junit东西(在这里有guice,但没有它也可以做到)。有趣的事情之一是,您可以模拟所有有趣的行为,因为数据库不会在测试之间持久存在(或者您可以通过在@beforeTest中实现预填充)。更多内容:
http://robolectric.org/customizing.html

关于java - 如何使用junit测试Android sqlite?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20218493/

10-11 20:31
查看更多