ArgumentCaptor с аннотацией @Captor в Котлине - PullRequest
0 голосов
/ 24 сентября 2018

Я использую ArgumentCaptor с @ Captor аннотацией в Kotlin, как это

@Captor private lateinit var captor: ArgumentCaptor<MyObject>
@Mock private lateinit var mockObject: InnerObject
private lateinit var objectToTest: MyClass

@Before
fun setUp() {
    MockitoAnnotations.initMocks(this)

    objectToTest = MyClass(mockObject)
}

fun testSomething() {
    objectToTest.doSomething()

    verify(mockObject).callMethod(captor.capture())
    assertThat(expectedResult, captor.value)

}

Метод callMethod () вызывается внутри doSomething () иЯ хочу захватить отправленный ему параметр.

Моя проблема в том, что я получаю:

java.lang.IllegalStateException: captor.capture() must not be null

Я попробовал тот же подход, используя java, и он работает, когда я конвертирую его в Kotlin, я получаю исключение.

Это связано с Kotlin?Или я не правильно использую @Captor?

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Это относится к Kotlin, потому что все параметры и поля по умолчанию не обнуляются.Вы должны определить параметр callMethod nullable:

mockObject).callMethod( any : Any? )

Другой способ решить эту проблему - использовать mockito-kotlin , который позволяет избежать таких аннотаций IllegalStateException и @KCaptor для mockito4kotlin.annotation :

import org.mockito4kotlin.annotation.KCaptor
import org.mockito4kotlin.annotation.MockAnnotations

@KCaptor
lateinit var captor: KArgumentCaptor<MyObject>

fun setUp() {
    MockAnnotations.initMocks(this)

    objectToTest = MyClass(mockObject)
}

fun testSomething() {

    objectToTest.doSomething()


    verify(mockObject).callMethod(captor.capture())
    assertThat(expectedResult, captor.value)

}

Я надеюсь, что смогу помочь.

0 голосов
/ 24 сентября 2018

Если вы используете Mockito, вам нужно вызвать MockitoAnnotations.initMocks(this) в тестовом классе setup метод.Ваше свойство captor никогда не инициализировалось, поэтому вы получаете IllegalStateException.

Редактировать : Я думаю, что вы найдете решение в этом вопросе stackoverflow .Ваш вопрос также может быть повторным, поскольку аналогичная проблема указана в ссылке, которую я вам предоставил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...