1

我在通用新的测试,并试图找出可以接受的策略进行测试,我使用Android上的SQLite数据库。Android的SQLite数据库的测试策略

我与我应该这样做究竟是如何挣扎,不同方法的优劣。

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

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

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

什么其他人做测试Android上的SQLite的代码?

谁能帮助我理解的单元测试与集成测试的优点,当涉及到的SQLite在Android?

回答

1

由于SQLite的非Android正在实施,本地单元测试不会对大多数连接到它的代码的工作。因此你需要运行一个仪器化的单元测试。但这并不意味着你需要编写真正的集成测试。

您可以使用Instrumentation本身的上下文来创建您正在测试的数据库。对于这一点,一些JUnit4方便您的gradle这个文件中定义

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 

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

这样做的好处是,它也适用于图书馆测试而不是检测任何实际的应用程序,或只是不在文件的上下文中。

由于Android JUnit4 Testing - Where to get Context from?你也可以使用

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

,并在自己的应用程序的情况下测试的数据库。