面试题答案
一键面试- 添加依赖:
在
build.gradle.kts
文件中添加Mockk和Spring Boot测试相关依赖:
testImplementation("io.mockk:mockk:1.13.5")
testImplementation("org.springframework.boot:spring-boot-starter-test")
- 模拟Spring Bean并在测试中使用: 假设我们有一个简单的Spring服务接口及其实现:
// 服务接口
interface UserService {
fun getUserNameById(id: Long): String
}
// 服务实现
@Component
class UserServiceImpl : UserService {
override fun getUserNameById(id: Long): String {
// 实际实现逻辑,这里简单返回示例字符串
return "User_$id"
}
}
下面是使用Mockk框架模拟UserService
并在测试中使用的示例代码:
package com.example.demo
import io.mockk.every
import io.mockk.mockk
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import io.mockk.impl.annotations.MockK
import io.mockk.junit5.MockKExtension
import org.junit.jupiter.api.extension.ExtendWith
@SpringBootTest
@ExtendWith(MockKExtension::class)
class UserServiceTest {
@MockK
lateinit var userServiceMock: UserService
@Test
fun testMockedUserService() {
val mockUserId = 1L
val mockUserName = "Mocked_User"
every { userServiceMock.getUserNameById(mockUserId) } returns mockUserName
val result = userServiceMock.getUserNameById(mockUserId)
assert(result == mockUserName)
}
}
在上述代码中:
- 首先通过
@MockK
注解创建了UserService
的模拟对象userServiceMock
。 - 使用
every
函数定义当调用userServiceMock.getUserNameById(mockUserId)
时返回mockUserName
。 - 最后调用模拟方法并进行断言,验证模拟是否按预期工作。