我创建了一个简单的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/