gpt4 book ai didi

使用 Room @Transaction 函数时,Android 仪器测试不会运行结束

转载 作者:搜寻专家 更新时间:2023-11-01 08:18:00 25 4
gpt4 key购买 nike

我正在使用运行 Android 9 的 AS 3.4.1 和模拟器进行测试。

当我在其中使用带有@Transaction 注释的Room Dao 函数 时,以下测试不会运行。

class RecurrenceManagerTest : DatabaseTest() {

@Rule
@JvmField
val instantTaskExecutorRule = InstantTaskExecutorRule()

var recurringEntryId: Long = -1

@Before
override fun setup() {
super.setup() // only initialized the db

val recurringEntry = RecurringEntry(
recurrence = Recurrence(DATE.toEpochMilli(), Recurrence.DAILY)
)

recurringEntryId = runBlocking { db.recurringEntryDao().insert(recurringEntry) }

val recurringBookEntry = BookEntry.create(
title = TITLE,
date = DATE,
value = VALUE,
isPaid = IS_PAID,
notes = NOTES,
entryType = ENTRY_TYPE,
categoryId = CATEGORY_ID,
contacts = CONTACTS,
recurringEntryId = recurringEntryId
)

runBlocking {
db.bookEntryDao().insert(recurringBookEntry) // BreakPoint #1
}
}

@Test
fun testInsertRecurrencesAndSchedule() {
var recurringEntry = runBlocking { db.recurringEntryDao().get(recurringEntryId) } // BreakPoint #2

assertThat(recurringEntry, notNullValue())

runBlocking { RecurrenceManager.insertRecurrencesAndSchedule(ApplicationProvider.getApplicationContext(), db, recurringEntry!!) }

val bookEntries = db.bookEntryDao().getBookEntries().liveDataValue()
}
}

这是插入函数:

@Transaction
suspend fun insert(bookEntry: BookEntry): Long {
val id = insert(bookEntry.entity)
bookEntry.embeddedContacts?.apply {
forEach {
it.id = 0
it.bookEntryId = id
}
}?.let {
insert(it)
}

return id
}

因此,如果我按原样运行测试(请参阅 BreakPoint #1),BreakPoint #2 甚至不会被调用,因此测试会在之前的某处结束,但没有结果。

如果我用完全相同的代码替换 BreakPoint #1 处的代码,insert 函数有,测试会正确运行。

有人知道这里的问题是什么吗?

最佳答案

您可以使用setTransactionExecutor在另一个线程中运行事务

return Room
.inMemoryDatabaseBuilder(context, MyRoomDatabase::class.java)
.setTransactionExecutor(Executors.newSingleThreadExecutor())
.build()

然后在测试时使用 runBlocking 而不是 runBlockingTest

@Test
fun moveItem() = runBlocking {
transactionFunction()
}

关于使用 Room @Transaction 函数时,Android 仪器测试不会运行结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56380210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com