【问题标题】:Testing an Activity which uses a ContentResolver测试使用 ContentResolver 的 Activity
【发布时间】:2014-03-07 18:25:40
【问题描述】:

在我的应用程序中,我有一个 Activity,它基本上是一种供用户输入数据的表单,然后通过 ContentResolver 将其插入到数据库表中。如何测试这个 Activity?

我的第一次尝试是使用ActivityInstrumentationTestCase2,它为我提供了完整的工具来模拟输入数据。但是,底层ContentProvider在每次测试之间并没有关闭和销毁,这使得数据库在后续测试开始时处于未知状态。

我的第二次尝试是使用ActivityUnitTestCase 并注入一个可以为每个测试清理数据库的模拟上下文。但是,这不允许我输入文本或单击 Activity 中的按钮,因为它实际上从未在测试设备上绘制。

有人对我还可以尝试什么有什么建议吗?

【问题讨论】:

    标签: android unit-testing testing


    【解决方案1】:

    您使用的似乎是用于库开发的

    您应该查看猴子二进制文件 here ,它对我很有用。

    如果您对它不满意,您可以使用monkeyRunner,它可以更好地控制您正在运行的测试。

    编辑: 就数据库测试而言,您不能在每次测试后使用 sqlite3 二进制文件进行简单查询吗?

    编辑2: 我正在考虑执行以下操作的 .sh 脚本:

    1. 运行猴子一段时间 - 您可以指定猴子要发送的事件数
    2. 使用查询将数据库完整性检查到日志文件中调用 sqlite3(sqlite3 命令可以将 sql 查询作为第二个参数,您可以使用“>”将输出写入某个文件)
    3. 重复。

    网上有很多 .sh 脚本的示例,所以你不应该对此有任何疑问。

    我假设您在 adb shell 中执行所有这些操作,但如果您不是,请确保正确设置所有环境变量。特别是 ANDROID_ROOT、ANDROID_ASSETS 和 ANDROID_DATA 应相应地设置为“/system”、“/system/app”和“/data”。也不要忘记“chmod” .sh 文件是可执行的( chmod 777 file.sh )。

    另一个建议是生成并跟踪猴子随机种子,以便您可以重复某些导致您出现问题的输入。您可以使用 -s 参数指定种子。

    【讨论】:

    • 由于我的活动将数据插入到底层数据库中,我想针对数据库编写断言以确保实际上插入了正确的数据。对于这种特殊的测试,猴子的随机性似乎并不合适。另一方面,MonkeyRunner 似乎提供了我想要的那种脚本。是否可以从 MonkeyRunner 脚本检查数据库?
    • 我不知道,但可以扩展一个 monkeyRunner 插件,然后将其包含在您的命令行中以进行额外的测试。请注意,这些插件不会让您访问 Android SDK。正如我所说,我只是使用二进制文件,对 Runner 没有经验。
    • "你不能在每次测试后使用 sqlite3 二进制文件进行简单查询吗" 你对如何自动化这个有什么建议吗?
    猜你喜欢
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多