Android 代码在真实设备中成功运行,但需要mockito,但未调用
我被通缉,但没有被调用。我不知道该怎么办,因为我是新来的:)。顺便说一下,当我在真实设备上运行代码时,它是可以的 需要但未调用:observer.onChanged(true) 测试类Android 代码在真实设备中成功运行,但需要mockito,但未调用,android,kotlin,mockito,mockito-kotlin,Android,Kotlin,Mockito,Mockito Kotlin,我被通缉,但没有被调用。我不知道该怎么办,因为我是新来的:)。顺便说一下,当我在真实设备上运行代码时,它是可以的 需要但未调用:observer.onChanged(true) 测试类 @RunWith(MockitoJUnitRunner::class) class LoginViewModelTest { var loginViewModel: LoginViewModel? = null @get:Rule val instan
@RunWith(MockitoJUnitRunner::class)
class LoginViewModelTest {
var loginViewModel: LoginViewModel? = null
@get:Rule
val instantTaskExecutorRule = InstantTaskExecutorRule()
@Mock
lateinit var observer: Observer<Boolean>
@Mock
lateinit var dataManager: DataManager
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
loginViewModel = LoginViewModel(dataManager)
}
@Test
fun testApiFetchDataSuccess() {
loginViewModel?.liveData?.observeForever(observer)
loginViewModel?.login("test", "1234")
verify(observer)?.onChanged(true)
}
}
@RunWith(MockitoJUnitRunner::class)
类LoginViewModelTest{
var loginViewModel:loginViewModel?=null
@获取:规则
val instantTaskExecutorRule=instantTaskExecutorRule()
@嘲弄
lateinit var观察者:观察者
@嘲弄
lateinit var数据管理器:数据管理器
@以前
趣味设置(){
initMocks(this)
loginViewModel=loginViewModel(数据管理器)
}
@试验
有趣的testapfetchdatasuccess(){
loginViewModel?.liveData?.ObserveForver(观察者)
loginViewModel?.login(“测试”,“1234”)
验证(观察者)?.onChanged(真)
}
}
ViewModelClass
class LoginViewModel(dataManager: DataManager?) : BaseViewModel() {
var liveData: MutableLiveData<Boolean>
var dataManager: DataManager? = dataManager
init {
liveData = MutableLiveData()
}
fun login(email: String, password: String) {
dataManager?.getFireStoreManager()?.login(email, password)?.get()?.addOnSuccessListener {
if (it.documents.size > 0) {
val data = it.documents[0].toObject(User::class.java)
liveData.postValue(true)
} else {
liveData.postValue(false)
}
}?.addOnFailureListener {
liveData.postValue(false)
}
}
}
classloginviewmodel(dataManager:dataManager?):BaseViewModel(){
var-liveData:MutableLiveData
var数据管理器:数据管理器?=数据管理器
初始化{
liveData=MutableLiveData()
}
有趣的登录(电子邮件:String,密码:String){
dataManager?.getFireStoreManager()?.login(电子邮件、密码)?.get()?.addOnSuccessListener{
如果(it.documents.size>0){
val data=it.documents[0].toObject(用户::class.java)
liveData.postValue(true)
}否则{
liveData.postValue(false)
}
}?addOnFailureListener{
liveData.postValue(false)
}
}
}
get()
不会返回任何内容,因为您模拟了包含所有数据的dataManager
在我的例子中,它看起来是这样的:
`when`(collectionRef.document(ArgumentMatchers.anyString())).thenReturn(documentReference)
`when`(documentReference.get()).thenReturn(firestoreDocumentResult)
您只需要为dataManager将触发的每个方法返回mock。Firebase操作通常是异步的。您不应该只是模仿dataManager,而是指示它在被要求返回时返回什么
getFireStoreManager()
。模拟FireStoreManager,然后从登录中模拟任务。希望这对你有帮助。我猜,addOnSuccessListener
从未被调用,您可以在那里设置断点。@giorgosnokleus您能写一个示例代码吗