gpt4 book ai didi

java - 如何用junit测试Android sqlite?

转载 作者:行者123 更新时间:2023-11-30 11:25:38 25 4
gpt4 key购买 nike

我创建了一个简单的 Android 应用程序(类似 HelloWorld),我知道我将添加操作以使用 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: 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com