问题描述
我的存储库测试有问题。 这是我第一次真正使用 Firebase,它们现在带有开箱即用的协程,所以我想我会使用它们
但是当我设置测试时,它在调用协程 await() 时永远挂起
@JvmField
@Rule
val rule = InstantTaskExecutorRule()
@get:Rule
val testCoroutineRule = TestCoroutineRule()
private lateinit var subject: UserDataRepository
@MockK
private lateinit var firestoreRef: FirebaseFirestore
@MockK
private lateinit var firebaseAuth: FirebaseAuth
@MockK
private lateinit var firebaseStorage: FirebaseStorage
@MockK
private lateinit var userDao: UserDao
@MockK
private lateinit var context: Context
@MockK
private lateinit var authResult: AuthResult
private val USERS = "Users"
private val user = UserData("Jo Bloggs")
private val email = "[email protected]"
private val password = "ilovefluffycats863$"
private val username = user.name
private val uid = "d98dy1x/;10v84i1[,'1"
private val data = hashMapOf("name" to user.name)
@Before
fun setup() {
MockKAnnotations.init(this)
every { context.getExternalFilesDir(null)?.absolutePath } returns "testing/path/child"
subject = UserDataRepository(
context,firestoreRef,firebaseAuth,firebaseStorage,userDao
)
}
@Test
fun `when createuser called successfully then returns AuthResult`() {
testCoroutineRule.runBlockingTest {
//GIVEN
coEvery { userDao.addUser(user) } returns 1
coEvery { firebaseAuth.createuserWithEmailAndPassword(email,password).await() } returns authResult
coEvery { firestoreRef.collection(USERS).document(uid).set(data).await() }
//WHEN
val actualAuthResult = subject.createuser(email,password,username)
//THEN
Assert.assertEquals(authResult,actualAuthResult)
}
}
测试方法:
suspend fun createuser(email: String,password: String,username: String): AuthResult {
userDao.addUser(UserData(username))
val data = hashMapOf(
"name" to username
)
val authResult = firebaseAuth.createuserWithEmailAndPassword(email,password).await()
firestoreRef.collection("Users")
.document(firebaseAuth.currentUser!!.uid)
.set(data).await()
return authResult
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)