MST

星途 面试题库

面试题:Kotlin中Mock测试与Mockito - Kotlin的复杂场景模拟

在一个Kotlin的Android项目中,有一个`UserRepository`接口定义了获取用户信息的方法`getUserInfo`,返回`User`对象。该`User`对象又有一个`getPermissions`方法返回权限列表。现需要使用Mockito - Kotlin对`UserRepository`进行Mock测试,模拟`getUserInfo`方法返回特定`User`对象,并且这个`User`对象的`getPermissions`方法也要模拟返回特定权限列表。请写出完整的测试代码,并解释其中涉及到的Mockito - Kotlin关键语法。
39.3万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
import org.junit.Test
import org.mockito.Mockito
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever

class UserRepositoryTest {

    @Test
    fun testGetUserInfo() {
        // 创建模拟的User对象
        val mockUser: User = mock()
        val mockPermissions = listOf("permission1", "permission2")
        // 模拟User对象的getPermissions方法返回特定权限列表
        whenever(mockUser.getPermissions()).thenReturn(mockPermissions)

        // 创建模拟的UserRepository对象
        val mockUserRepository: UserRepository = mock()
        // 模拟UserRepository的getUserInfo方法返回特定User对象
        whenever(mockUserRepository.getUserInfo()).thenReturn(mockUser)

        // 调用被测试方法
        val user = mockUserRepository.getUserInfo()
        val permissions = user.getPermissions()

        // 验证结果
        assert(permissions == mockPermissions)
    }
}

// 定义UserRepository接口
interface UserRepository {
    fun getUserInfo(): User
}

// 定义User类
class User {
    fun getPermissions(): List<String> {
        return emptyList()
    }
}

Mockito - Kotlin关键语法解释:

  1. mock函数:用于创建模拟对象。例如val mockUser: User = mock()创建了一个User类的模拟对象,val mockUserRepository: UserRepository = mock()创建了UserRepository接口的模拟对象。
  2. whenever函数:用于设置模拟对象方法的行为。如whenever(mockUser.getPermissions()).thenReturn(mockPermissions)设置了mockUsergetPermissions方法返回特定的权限列表;whenever(mockUserRepository.getUserInfo()).thenReturn(mockUser)设置了mockUserRepositorygetUserInfo方法返回特定的User对象。