Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin mock:mock一个jpa repository.save调用_Kotlin_Mockk - Fatal编程技术网

Kotlin mock:mock一个jpa 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

我的测试代码将对象保存到数据库和一些点,但我不需要测试它。 所以我想模拟Repository.save方法。但是
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