【问题标题】:Android JUnit Test with SQLCipher for Android使用适用于 Android 的 SQLCipher 进行 Android JUnit 测试
【发布时间】:2014-07-14 08:29:59
【问题描述】:

在我的应用程序中,我使用 SQLCipher 来加密我的数据库。起初,我忘记将 icudt46l.zip 添加到我的应用程序资产文件夹中,我收到了一个例外,上面写着 net.sqlcipher.database.SQLiteException: not an error

这很容易解决,因为我只需要将文件复制到资产文件夹。现在我的应用程序快完成了,我需要编写一些自动化测试。一开始,我认为 JUnit 测试是一个不错的选择。所以我创建了一个简单的 ActivityUnitTestCase 开始。不幸的是,每次我开始测试时,我都会再次收到net.sqlcipher.database.SQLiteException: not an error

我希望你能告诉我我做错了什么。我也将 icudt46l.zip 复制到了我的测试项目资产文件夹中,但这次它没有修复它。

【问题讨论】:

    标签: java android testing junit sqlcipher


    【解决方案1】:

    Android 的 SQLCipher 被构建为直接在设备/模拟器上运行,而 JUnit 测试通常直接在桌面 Java VM 中运行。我们发现能够在各种设备/Android 平台上测试适用于 Android 的 SQLCipher 并使用单独的应用程序作为测试套件很有帮助。有关测试套件的更多信息,请访问here

    【讨论】:

    • 有什么替代方法可以在 JVM 上进行测试吗?
    【解决方案2】:

    今天发生了一件我无法理解也无法解释的事情。我刚刚从我所有的设备/模拟器中删除了该应用程序并重新安装了它。在这一步之后,我能够运行 Android JUnit 测试而不会出现错误。我不知道发生了什么变化,但现在它工作正常。

    正如 Nick Parker 所说,正常的 JUnit 测试将直接在 JVM 中运行,但在 Android 上,JUnit 测试有点不同。他们需要一个设备或模拟器来运行。这就是为什么我不能将 Robolectric 用于我的 JUnit 测试但普通的 Android JUnit 测试现在可以工作的原因。

    目前,我混合了用于 POJO 的 TestCases、用于测试我的活动布局的 ActivityUnitTestCases 和用于功能测试的 ActivityInstrumentationTestCase2s。我还使用 Robotium 进行功能测试。

    同样,我无法解释为什么它现在有效,但说实话:只要它有效,我并不在乎。所以..如果有人有同样奇怪的行为,我只能建议在运行测试之前删除应用程序并重新安装。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 2018-02-20
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多