модульное тестирование функции расширения и насмешка над другими методами класса - PullRequest
0 голосов
/ 06 сентября 2018

Я пишу функцию расширения, добавляющую некоторые возможности повтора к AmazonKinesis.putRecords.В моем методе расширения я делаю некоторую логику и некоторые вызовы оригинального метода putRecords:

fun AmazonKinesis.putRecordsWithRetry(records: List<PutRecordsRequestEntry>, streamName: String) {
    //...
    val putRecordResult = this.putRecords(PutRecordsRequest().withStreamName(streamName).withRecords(records))
   //...
}

С точки зрения модульного тестирования мне трудно понять, как я должен насмехаться над вызовом this.putRecords

Я использую com.nhaarman.mockitokotlin2.*

val successfulRequest = PutRecordsResultEntry().withErrorCode(null);

class KinesisExtensionTest : StringSpec({
    val testRecords = ArrayList<PutRecordsRequestEntry>()
    testRecords.add(PutRecordsRequestEntry().withPartitionKey("iAmABunny").withData(ByteBuffer.wrap("aaa".toByteArray()))
    )

    val kinesis = mock<AmazonKinesis>{
        on { putRecordsWithRetry(testRecords, "/dev/null") }.thenCallRealMethod()
        on { putRecords(any()) }.thenReturn(PutRecordsResult().withRecords(listOf(successfulRequest, successfulRequest)))
    }


    "can write a record" {
        kinesis.putRecordsWithRetry(testRecords, "/dev/null")
        verify(kinesis).putRecord(any())
    }
})

putRecordResult всегда равно нулю

1 Ответ

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

Функция расширения AmazonKinesis.putRecordsWithRetry будет скомпилирована в статическую функцию под капотом, а Mockito пока не поддерживает статический метод насмешки .

Таким образом, Mockito может не знать информацию о заглушке на этапе проверки и, таким образом, создается значение по умолчанию null.

...