如何解决Android Viewmodel 测试从 Room 检索空关系对象
我在测试视图模型时遇到问题。当我在设备上运行它时,它可以工作,但是当运行 AndroidJunit4 测试时,它无法从 Room 数据库加载对象。在这种情况下,对象是在视图模型中检索到的对象,它是一个 one-to-many 关系,正如文档中所述。
我已经查看了数据库检查器,并且在运行 start() 函数之前,所有数据都在数据库中。
有人知道我做错了什么吗?是我不应该使用真实的数据库进行测试,还是在从测试调用的函数中启动协程时存在一些问题?
viewmodel 测试
const Field = ({ defaultValue,onChange }) => (
<input defaultValue={defaultValue} onChange={onChange} />
);
const Test = () => {
const [first,setFirst] = useState("");
const [second,setSecond] = useState("");
return (
<Datatable
noText
pageSize={1}
showPagination={false}
data={[{ userName: "asdas",email: "asdsad" }]}
columns={[
{
Header: "www",accessor: "userName",Cell: (
<Field
defaultValue={first}
onChange={(e) => setFirst(e.currentTarget.value)}
/>
)
},{
Header: "Email",accessor: "email",Cell: (
<Field
defaultValue={second}
onChange={(e) => setSecond(e.currentTarget.value)}
/>
)
}
]}
/>
);
};
视图模型类
//variable
@Test
@Before
fun initializeDatabase() = runBlocking {
val context = ApplicationProvider.getApplicationContext<Context>()
database = Room.inMemoryDatabaseBuilder(context,AppDatabase::class.java).build()
scheduledTreatmentRepository = DefaultScheduledTreatmentRepository.getInstance(
database.scheduledTreatmentDao(),database.scheduledTreatmentCrossRefDao()
)
val customerRepository = CustomerRepository.getInstance(database.customerDao())
viewmodel = AddEditTreatmentviewmodel(customerRepository,scheduledTreatmentRepository)
}
@After
fun closeDb() {
database.close()
}
@Test
fun start_validId_loadsValues() = runBlocking {
val time = 100L
val scheduledTreatment = ScheduledTreatment(
id = 11,treatmentId = treatment.id,treatmentTime = Calendar.getInstance().apply { timeInMillis = time },timeTemplateId = timeTemplate.id,messageId = message.id
)
database.scheduledTreatmentDao().insert(scheduledTreatment)
val scheduledTreatmentCustomerCrossRef =
ScheduledTreatmentCustomerCrossRef(11,receiver1.id)
database.scheduledTreatmentCrossRefDao().insert(scheduledTreatmentCustomerCrossRef)
//Starts a coroutine and loads in the values in the viewmodel
\/
viewmodel.start(11)
// Value never set
// \/
assertthat(viewmodel.customers.getorAwaitValue(),`is`(mutablelistof(receiver1)))
assertthat(viewmodel.message.getorAwaitValue(),`is`(messages))
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。