Я хочу вставить некоторые данные в мою БД в Android Room.Проблема в том, что каждый раз, когда я запрашиваю свои данные, результат равен нулю.
Это код моей базы данных:
@Database(entities = [VenueResult::class, VenueDetailResult::class], version = 1, exportSchema = false)
abstract class VenueFinderDatabase: RoomDatabase() {
abstract fun venueResultsDao(): VenueResultsDao
abstract fun venueDetailDao(): VenueDetailDao
companion object {
private var instance: VenueFinderDatabase? = null
fun getInstance(context: Context) : VenueFinderDatabase {
instance?.let {
return it
} ?: run {
synchronized(VenueFinderDatabase::class) {
Room.databaseBuilder(context.applicationContext,
VenueFinderDatabase::class.java, "venuefinder.db")
.build().let {
return it
}
}
}
}
}
}
Это мой Дао:
@Dao
interface VenueResultsDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(venueResult: VenueResult): Long
@Query("SELECT * FROM venueResult WHERE requestId = :requestId")
fun getVenueResultsForRequestId(requestId: String): LiveData<List<VenueResult>>
@Query("SELECT * FROM VenueResult WHERE search_value = :value")
fun getVenueResultsForSearchValue(value: String): LiveData<List<VenueResult>>
}
Это моя сущность:
@Entity
data class VenueResult(
@PrimaryKey val id: String,
@ColumnInfo(name = "requestId") val requestId: String,
@ColumnInfo(name = "name") val name: String,
@ColumnInfo(name = "location_cc") val locationCC: String?,
@ColumnInfo(name = "location_city") val locationCity: String?,
@ColumnInfo(name = "location_state") val locationState: String?,
@ColumnInfo(name = "search_value") val searchValue: String
)
А это мой инструментированный тест:
@RunWith(AndroidJUnit4::class)
class VenueFinderDatabaseInstrumentedTest {
private lateinit var database: VenueFinderDatabase
private lateinit var venueResultsDao: VenueResultsDao
@Before
fun setup() {
val context = ApplicationProvider.getApplicationContext<Context>()
database = Room.inMemoryDatabaseBuilder(
context, VenueFinderDatabase::class.java
).build()
venueResultsDao = database.venueResultsDao()
}
@After
fun tearDown() {
database.clearAllTables()
database.close()
}
@Test
fun validateIfDataIsInsertedInDatabase() {
// Arrange
val searchValue = "New York"
val venueResult = getDummyVenueResult(searchValue)
// Act
venueResultsDao.insert(venueResult)
val result = venueResultsDao.getVenueResultsForSearchValue(searchValue).value?.first()
// Assert
assertNotNull(result)
//assertEquals(venueResult, result)
}
private fun getDummyVenueResult(value: String) =
VenueResult(
id = "5642aef9498e51025cf4a7a5",
requestId = "59a45921351e3d43b07028b5",
name = "Mr. Purple",
locationCC = "US",
locationCity = "New York",
locationState = "NY",
searchValue = value
)
}
Может кто-нибудь указать мне, что я делаю не так?Почему мой результат нулевой и как я могу это исправить?