Kotlin mock:mock一个jpa repository.save调用
我的测试代码将对象保存到数据库和一些点,但我不需要测试它。 所以我想模拟Repository.save方法。但是Kotlin mock:mock一个jpa repository.save调用,kotlin,mockk,Kotlin,Mockk,我的测试代码将对象保存到数据库和一些点,但我不需要测试它。 所以我想模拟Repository.save方法。但是save方法返回保存的对象。 我尝试了以下方法: @MockK private lateinit var mockJobRepository: JobRepository val jobSlot = slot<Job>() // ... every { mockJobRepository.save<Job>(capture(jobSlot)) } re
save
方法返回保存的对象。
我尝试了以下方法:
@MockK
private lateinit var mockJobRepository: JobRepository
val jobSlot = slot<Job>()
// ...
every { mockJobRepository.save<Job>(capture(jobSlot)) }
returns(jobSlot.captured)
@mock
私有lateinit var mockJobRepository:JobRepository
val jobSlot=slot()
// ...
每个{mockJobRepository.save(捕获(jobSlot))}
返回(jobSlot.captured)
但它会抛出一个运行时错误:
“捕获的lateinit属性尚未初始化”
如何在模拟中返回给定的参数?您试过了吗
private val mockJobRepository = mockk<JobRepository>()
private val mockJobRepository=mockk()
?
我注意到,lateinit变量上的@mock注释可能很挑剔当使用注释时,您必须在某个时候告诉mock初始化带注释的属性。假设您使用的是JUnit 5,您可以通过在@beforeach中初始化mock来实现:
class Test {
@MockK
private lateinit var emailService: EmailService
@BeforeEach
fun setUp() {
MockKAnnotations.init(this)
}
}
…或者只使用JUnit的Mock扩展:
@ExtendWith(MockKExtension::class)
class Test {
@MockK
private lateinit var emailService: EmailService
}
顺便说一句,比捕获参数更详细的选项是returnsArgument
:
every { mockJobRepository.save<Job>(any()) } returnsArgument 0
每个{mockJobRepository.save(any())}返回一个0