java - Android Studio 单元测试 SQLiteDataBase 为空

标签 java android sqlite unit-testing

我是单元测试的新手,我想测试我的 SQLiteDataBase。

我有一个名为 MySQLiteHelper 的类,它扩展了 SQLiteOpenHelper。 我有一个名为 LocationDataHandler 的类,用于在我的数据库中添加或删除元素。 我有一个 LocationDataHandlerTest 类,它扩展了 AndroidTestCase,用于测试我的 LocationDataHandler 类。

我正在尝试测试我的 SQLite 数据库,但我似乎在所有不同的上下文之间有点不知所措。

这是我的代码:

//Context context = new Activity();

//IsolatedContext context = getMockContext();

//Context context = new MockContext();

//Context context = getInstrumentation().getContext();

  Context context = getContext();

  helper = new MySQLiteHelper(context);
  assertNotNull(helper);

  SQLiteDatabase db = helper.getWritableDatabase();
  assertNotNull(db); <---- it fails here !

如您所见,我尝试了很多不同的环境,我看到人们使用和处理过这些环境。我真的不明白为什么它对我的情况不起作用。

我的问题是测试在行“assertNotNull(db);”上失败了这意味着我永远无法检索我的数据库。

我做错了吗?我没有使用正确的上下文吗?

编辑:这是我的logcat:

junit.framework.AssertionFailedError
    at junit.framework.Assert.fail(Assert.java:55)
    at junit.framework.Assert.assertTrue(Assert.java:22)
    at junit.framework.Assert.assertNotNull(Assert.java:256)
    at junit.framework.Assert.assertNotNull(Assert.java:248)
    at junit.framework.TestCase.assertNotNull(TestCase.java:417)
    at com.databerries.LocationDataHandlerTest.testAddLocation(LocationDataHandlerTest.java:72)

最佳答案

是的,这是上下文问题。所有这些上下文(包括您注释掉的上下文)都是空的。

你可以创建一个上下文:

context = new MockContext();

对于与您的应用程序相同的数据库(或其他资源),您可以使用(因为您正在使用 AndroidTestCase):

context = getInstrumentation().getContext();

有一种创建和使用 RoamingDelegatingContext 的正确方法,但您的测试似乎不需要它。

您可以考虑阅读 Android Testing Fundamentals帮助理解测试的一些问题以及所需的访问权限/资源级别。

关于java - Android Studio 单元测试 SQLiteDataBase 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30509788/

相关文章:

Java GC 未收集某些对象

sqlite - Phonegap/Cordova 3存储问题

java - 无法在缅因州使用鼠标事件

java - 如何从 Java 代码运行 Hadoop HDFS 命令

java - 我如何提交 Play! JPA交易手动?

php - 仅当 SQLite 表不存在时才创建它

php - 是否可以在没有 sqlite 函数的情况下将 SQLite 数据库与 PHP 一起使用?

android - BLE 与 Android 5.0 : How to get a device to act as Central AND Server?

android - 以编程方式选择时,CheckedTextView 不绘制复选标记

android - 如何在android中覆盖sdcard中的文件?