代码之家  ›  专栏  ›  技术社区  ›  AndroidDev

然后使用SharedReference值返回时单击Mockito

  •  0
  • AndroidDev  · 技术社区  · 6 年前

    我正在用Mockito做我第一次深入的单元测试,所以请耐心听我说。我正在做这个测试:

    class PasswordStateManagerTest {
    
        private lateinit var passwordStateManager: PasswordStateManager
    
        @MockK
        private lateinit var mockContext: Context
    
        @MockK
        private lateinit var mockSharedPreferences: SharedPreferences
    
        @Before
        fun setup() {
            MockKAnnotations.init(this, true)
            every{ mockContext.getApplicationSharedPreferences() } returns mockSharedPreferences
    
            // this is the line that won't compile
    Mockito.when(mockSharedPreferences.getBoolean("save_password", false)
        )
                        .thenReturn(true)
    
            passwordStateManager = PasswordStateManager(mockSharedPreferences)
        }    
    }
    

    { 我试图执行的角色 .thenReturn . 当我阅读文档时,在这个声明中没有空括号,所以我必须离开正轨。

    init {
        willSavePassword = prefs.getBoolean("save_password", false)
    }
    

    谢谢你的帮助(还有耐心让我跟上进度!)。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Kevin Coppock    6 年前

    这是因为 when 是Kotlin中的保留关键字,因此编译器将其解释为 什么时候

    when (value) {
        "value1" -> // do thing
    }
    

    要解决此问题,可以使用反勾号转义方法名称:

    Mockito.`when`(mockSharedPreferences.getBoolean("save_password", false)).thenReturn(true);
    

    或者,既然您正在使用mock,就切换到另一个 every

    every { mockSharedPreferences.getBoolean("save_password", false) } returns true