首页 > 解决方案 > 尝试使用 Argument Captor 在 Kotlin 中捕获参数时出错

问题描述

我无法在 Kotlin 中使用 captor 参数。

服务等级:

class ClassService(private val clientFeign: ClientFeign) {

    fun startIntegration() {
        val object: ObjectVO = createObject()
        val objectCreated = clientFeign.createObject(object)
        return objectCreated
    }
}

测试类别:

import io.mockk.impl.annotations.MockK
import io.mockk.junit5.MockKExtension
import com.nhaarman.mockitokotlin2.argumentCaptor
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith

@ExtendWith(MockKExtension::class)
@DisplayName("Test")
class ServiceTest {
    @MockK
    private lateinit var clientFeign: ClientFeign
    
    private lateinit var classService: ClassService

    @Test
    fun `should create client`() {
         val obejctVO = ObjectVO(.....)
         
         every { clientFeign.createObject(any()) } 
         returns objectVO
  
         classService.startIntegration()
  
         var objectCaptor = com.nhaarman.mockitokotlin2.argumentCaptor<ObjectVO()

         verify(exactly = 1) {
           clientFeign.createObject(
             objectCaptor.capture(),
           )
         }
     }
}
    

我遇到以下错误:

java.lang.AssertionError:验证失败:调用 1 of 1:ClientFeign(clientFeign#6).createClient(null()))。只发生了一次对 ClientFeign(clientFeign#6)/createClient(objectVO) 的匹配调用,但参数不匹配:[0]:参数:ObjectVO(id=null, name=TESTE, poEmail=teste@gmail.com, displayName=测试,数字=4),匹配器:null(),结果:

我不明白为什么这些论点不匹配。

标签: unit-testingkotlinmockito-kotlin

解决方案


推荐阅读