Тестирование пользовательского интерфейса удаленной таблицы базы данных Android - PullRequest
0 голосов
/ 07 мая 2019

Я опускаю стол и хочу проверить его.

MIGRATION_1_2 удаляет таблицу 'b', связанную с BDao. Поэтому AppDatabase не может получить экземпляр BDao. Также B :: class удаляется из сущностей.

@Database(entities = [A::class/*, B::class*/], version = 2)
abstract class AppDatabase : RoomDatabse() {
  abstract aDao: ADao
  // abstract bDao: BDao

  companion object {
    fun getDatabase(context: Context): AppDatabse {
      ...
      Room.databaseBuilder(context.applicationContext,
          AppDatabase::class.java, DATABASE_NAME)
          .addMigrations(MIGRATION_1_2)
          .build()
      ...
    }

    val MIGRATION_1_2 = object Migration(1, 2) {
      override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL("""
            DROP TABLE 'b'
        """)
      }
    }
  }
}

Ниже приведен код теста. Я могу получить Дао, но не могу получить Дао. Как проверить, что таблица b удалена?

@RunWith(AndroidJUnit4::class)
class MigrationTest {

  @Rule
  @JvmField
  val helper = MigrationTestHelper(
      InstrumentationRegistry.getInstrumentation(),
      AppDatabase::class.java.canonicalName,
      FrameworkSQLiteOpenHelperFactory()
   )

  @Test
  fun migrate1To2() {
    val db = helper.createDatabase(TEST_DB, 1)

    insertAData(db)
    isnertBData(db)
    db.close()

    helper.runMigrationsAndValidate(TEST_DB, 2, true, AppDatabase.MIGRATION_1_2)
    helper.closeWhenFinished(database)

    // I can test with A.
    val adao = database.aDao()

    // But I can't test with B.
    // val bdao = database.bDao()
  }
}

1 Ответ

0 голосов
/ 07 мая 2019

Я пишу метод, на который ссылаются из https://stackoverflow.com/a/7863401/2423899

private fun AppDatabase.isTableExisting(tableName: String): Boolean {
    assert(isOpen)
    val query = SupportSQLiteQueryBuilder
            .builder("sqlite_master")
            .distinct()
            .columns(arrayOf("tbl_name"))
            .selection("tbl_name=?", arrayOf(tableName))
            .create()
    val cursor = query(query)
    val count = cursor.count > 0
    cursor.close()
    return count
}

Ниже код проверяет, что таблица b удалена.

assertThat(database.isTableExsiting("b"), `is`(false))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...