【问题标题】:JUnit test cases for FirebaseRemoteConfig in android using Mockito使用 Mockito 的 Android 中 FirebaseRemoteConfig 的 JUnit 测试用例
【发布时间】:2020-12-10 14:14:15
【问题描述】:

如何使用 Mockito 在 android 中为 FirebaseRemoteConfig 编写 JUnit 测试用例。

到目前为止我已经尝试过了:

class MyUtilClassTest {
   @Test
   fun testKeyValue() {
      val context = mock(Context::class.java)
      FirebaseApp.initializeApp(Context)
      val keyValue = MyUtilClass.getKeyValue("keyName")
      assertTrue(keyValue)
   }
}

object MyUtilClass {
   fun getKeyValue(key: String) {
       FirebaseRemoteConfig.getInstance().getString(documentName)
       ...
   }
}

但是得到这个异常:

java.lang.NullPointerException
    at com.google.android.gms.common.internal.StringResourceValueReader.<init>(com.google.android.gms:play-services-basement@@17.3.0:5)
    at com.google.firebase.FirebaseOptions.fromResource(FirebaseOptions.java:156)
    at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:242)

【问题讨论】:

  • IMO,测试 firebase 远程配置看起来不太适合进行单元测试。

标签: android kotlin junit mockito firebase-remote-config


【解决方案1】:

我强烈建议使用 Mockito 来模拟依赖 Firebase 远程配置的 MyUtilClass 方法,而不是直接在单元测试中使用它。

例如,这样的事情可能会起作用(抱歉,如果 Mockito 的用法是 不是 100% 准确,已经有一段时间了):

@Test
public void myTest {
  MyUtilClass mockUtilClass = Mockito.mock(MyUtilClass.class);
  Mockito.when(mockUtilClass.getKeyValue(eq("keyName")).thenReturn("expectedValue"));

  // Run test with mocked util class.
  testCodePath()

}

请注意,虽然在部署到测试设备时在 QA 环境中测试 Remote Config 是有意义的,但在单元测试中测试 Remote Config 本身几乎不是一个好主意。您可以硬编码或模拟您希望从远程配置返回的值,而不是这样做,并根据这些值集测试您的函数或组件。

【讨论】:

    猜你喜欢
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多