Android Sqlite数据库测试策略

时间:2016-02-11 18:24:18

标签: android sqlite unit-testing integration-testing android-testing

我是新手测试,并试图找出一个可接受的策略来测试我在Android上使用的Sqlite数据库。

我正在努力应该如何做到这一点以及不同方法的优点。

没有太多经验,似乎一个好的方法可能是运行集成测试。 AFAIK这意味着启动模拟器以测试然后运行将在模拟器上实际创建和修改数据库的测试。这种方法听起来很有吸引力,因为我可以进行“往返”测试,我将从一些预构建的数据对象开始,并可以使用它们和真正的数据库测试所有CRUD操作。这将允许我实际验证,如果我插入一个对象,然后将其读回,那就是进入的POJO是相同的。我还可以验证诸如对象集合的排序,确认删除确实发生,数据库升级等等......

我可以设想的另一种测试方法是使用单元测试而不是集成测试。我可以设想这些测试涉及验证是否正确创建了ContentValues对象,或者确保给定某个Cursor对象以正确创建了POJO。

对我来说,似乎集成测试方法更优越,因为它可以提供良好的测试覆盖率,我编写的CRUD代码是正确的,这样我就不会遇到我期望对象字段的情况填充但它是null,或类似的东西。

其他人在Android上测试他们的Sqlite代码会做些什么?

在Android上使用Sqlite时,有人能帮我理解单元测试与集成测试的优点吗?

1 个答案:

答案 0 :(得分:2)

由于SQLite是在Android中实现的,因此本地单元测试对于连接到它的大多数代码都不起作用。因此,您需要为它运行一个检测单元测试。但这并不意味着您需要编写真正的集成测试。

您可以使用Instrumentation本身的上下文来创建您正在测试的数据库。为此和一些JUnit4方便定义

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
在您的gradle文件中

并使用InstrumentationRegistry.getContext()访问上下文。

这样做的好处是,它也可用于库测试,不用于检测任何实际应用程序,或者只是不在文件的上下文中保留文件。

Android JUnit4 Testing - Where to get Context from?开始,你也可以使用

new RenamingDelegatingContext(InstrumentationRegistry.getTargetContext(), "test_");

并在您自己的应用程序的上下文中测试数据库。