我正在编写扩展功能,为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
始终为空
答案 0 :(得分:0)
扩展功能AmazonKinesis.putRecordsWithRetry
将被编译为Mockito doesn't support static method mocking yet内部的静态函数。
因此Mockito在验证步骤可能不知道存根信息,因此会产生默认的null
值。