如何在 robolectric 中对具有本机依赖项的内容提供程序和数据库调用进行单元测试
How to unit test Content provider and DB calls in robolectric which has native dependencies
我想在我的项目中使用 robolectric(3+) 进行单元测试。问题是在我们的项目中,我们没有使用来自 android.database.sqlite 的 sqlite 依赖项,而是使用来自 sqlite 项目 (org.sqlite.database) 的已编译源代码。这是因为我们在数据库中使用基于硬件的加密来确保安全。 org.sqlite.database 上的依赖项调用本机代码。
Robolectric 不支持任何外部本机代码(将提供 java.lang.UnsatisfiedLinkError)。我项目中的 ContentProvider 和 SQLite 助手 class 引用了 org.sqlite.database 包中的代码,用于创建 tables、构建查询、table 连接。
现在,我可以为测试用例创建另一个内容提供者,但它会导致代码重复,并且不会测试实际的内容提供者。在内容提供者中,我可以将数据库操作分成不同的 classes 但这同样是代码重复。看来我必须 运行 它们作为检测测试用例。如果有人有一些建议,那就太好了。
我们运行将这些测试作为仪器测试。当前 robolectric 不支持任何外部本机代码,并在尝试访问任何本机方法时出现此错误。
因此,除了 运行 设备上所有与数据库相关的单元测试之外别无选择。
我想在我的项目中使用 robolectric(3+) 进行单元测试。问题是在我们的项目中,我们没有使用来自 android.database.sqlite 的 sqlite 依赖项,而是使用来自 sqlite 项目 (org.sqlite.database) 的已编译源代码。这是因为我们在数据库中使用基于硬件的加密来确保安全。 org.sqlite.database 上的依赖项调用本机代码。 Robolectric 不支持任何外部本机代码(将提供 java.lang.UnsatisfiedLinkError)。我项目中的 ContentProvider 和 SQLite 助手 class 引用了 org.sqlite.database 包中的代码,用于创建 tables、构建查询、table 连接。 现在,我可以为测试用例创建另一个内容提供者,但它会导致代码重复,并且不会测试实际的内容提供者。在内容提供者中,我可以将数据库操作分成不同的 classes 但这同样是代码重复。看来我必须 运行 它们作为检测测试用例。如果有人有一些建议,那就太好了。
我们运行将这些测试作为仪器测试。当前 robolectric 不支持任何外部本机代码,并在尝试访问任何本机方法时出现此错误。 因此,除了 运行 设备上所有与数据库相关的单元测试之外别无选择。