如何使用Mockito测试此功能?

我正在尝试测试Permission.REVEAL_NOW返回方法isFeatureRevealNowAvailable。 这是我已经尝试过但未成功的一些代码。任何帮助将一如既往地受到赞赏!

要测试的功能:

class PermissionRepository(private val permissionApi: PermissionApi,private val appPreferences: AppPreferences) {

fun checkPermission(permission: PermissionType,onPermissionResponse: (Boolean) -> Unit) {
    Log.i("Permission","Checking permission")
    when (permission) {
        PermissionType.REVEAL_NOW -> {
            isFeatureRevealNowAvailable(onPermissionResponse,::errorHandler)
        }
    }
}

尝试的解决方案:

@RunWith(MockitoJUnitRunner::class)
class PermissionRepositoryTest{

@Test
fun checkPermissionTest() {
    val mockPermissionRepository = mock(PermissionRepository::class.java)
    val mockPermissionApi = mock(PermissionApi::class.java)
    val result = mockPermissionRepository.checkPermission(PermissionType.REVEAL_NOW,onPermissionResponse = null)

    //Unsure of what to use here AssertThat or Mockito's "when" function


}

}

private fun isFeatureRevealNowAvailable(permissionResponseHandler: (Boolean) -> Unit,permissionError: (Throwable) -> Unit) {

    permissionApi.getRevealNowPermission().enqueue(object : Callback<PermissionResponse> {
        override fun onFailure(call: Call<PermissionResponse>,t: Throwable) {
            permissionResponseHandler(false)
            permissionError(t)
        }

        override fun onResponse(call: Call<PermissionResponse>,response: Response<PermissionResponse>) {
            val permissionResult = response.body()?.isRevealNow ?: false

            updateUserLocalPermission(PermissionType.REVEAL_NOW,permissionResult)

            permissionResponseHandler(permissionResult)
        }
    })
}
qe2004 回答:如何使用Mockito测试此功能?

(TL; DR-转到示例

由于您没有明确定义要测试或实现的目标,因此我将给出一些总体提示:

嘲笑

  • 从不模拟您要测试的类

    val mockPermissionRepository = mock(PermissionRepository::class.java)

  • 仅模拟要从测试中排除但要依靠的内容

  • 尝试尽可能避免嘲笑,因为它们模拟的是一个完美的世界,而不是真实的行为

测试命名

使用专有名称描述您要通过测试达到的目标。我个人最喜欢的是以“应该...”一词开头的句子

示例

我可以为您的功能写两个测试:

@Test
    fun `should invoke reveal permission on PermissionApi when type is REVEAL_NOW`(){
    val mockPermissionApi = mock(PermissionApi::class.java)
    val permissionRepository = PermissionRepository(mockPermissionApi,mock())

    permissionRepository.checkPermission(PermissionType.REVEAL_NOW,onPermissionResponse = {})

    verify(mockPermissionApi,times(1)).getRevealNowPermission()
}

@Test
fun `should do nothing when type is not REVEAL_NOW`() {
    val mockPermissionApi = mock(PermissionApi::class.java)
    val permissionRepository = PermissionRepository(mockPermissionApi,mock())

    permissionRepository.checkPermission(PermissionType.ELSE,times(0)).getRevealNowPermission()
}
本文链接:https://www.f2er.com/3118530.html

大家都在问