【问题标题】:mock a database reference callback with mockito使用 mockito 模拟数据库引用回调
【发布时间】:2022-01-07 17:18:29
【问题描述】:

我正在尝试通过检索简单的用户信息来测试数据库引用,我尝试模拟数据库引用并对其应用模拟逻辑,但由于某种原因它不起作用,通过失败,我还是新手mockito 如果有人可以帮助谢谢你,你能告诉我如何用 mockito 模拟 addValuelistener

  • 这是我的代码

ServiceLocator
          .db_reference
          .child("Users")
          .child(ServiceLocator.auth.currentUser!!.uid)
          .addListenerForSingleValueEvent(object  : ValueEventListener{
              override fun onDataChange(snapshot: DataSnapshot) {
                  if(snapshot.exists()){
                     /// getting data
                  }
              }

              override fun onCancelled(error: DatabaseError) {

              }

          })

  • 这是测试代码
  @Test
   fun h_testCaseGetUserInfoFromDB(){
       val firebaseMock = mock(FirebaseAuth::class.java)
       val databaseMock = mock(DatabaseReference::class.java)

       ServiceLocator.auth = firebaseMock
       ServiceLocator.db_reference = databaseMock


       `when`(databaseMock.child("Users").child(firebaseMock.currentUser!!.uid).get()).thenReturn(
           isNotNull())

   }

【问题讨论】:

    标签: android firebase android-studio kotlin mockito


    【解决方案1】:

    请考虑以下关于模拟的注意事项

    Mocks 不是真正的实现,并且对它一无所知。
    它主要用于检查某个动作是否会发生,即 断言某个函数已经接收到某个参数, 不保证此功能将在 真正的实现。
    另请注意,它不会返回任何值 真正的实现。

    因此,在您的代码中,您正在测试您的真实 Firebase 中是否存在某些数据。所以你需要用真正的 firebase 实例进行测试,Mocks 在这里没有工作要做。所以不要使用它

    【讨论】:

    • 哦,好吧,所以模拟的使用是有限的,所以根据你的帖子,没有办法验证数据是否存在于 firebase 数据库中,因此我应该检查真实的生产代码对吗?
    • 是的,不要在服务定位器中设置模拟的 firebase 类
    • 知道了,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    相关资源
    最近更新 更多