单元测试扩展功能并模拟 class 的其他方法
unit testing extension function and mocking the other methods of the class
我正在编写一个扩展函数,向 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
始终为 null
扩展函数 AmazonKinesis.putRecordsWithRetry
将在后台编译为静态函数,Mockito doesn't support static method mocking yet。
因此 Mockito 可能不知道验证步骤中的存根信息,因此会生成默认的 null
值。
我正在编写一个扩展函数,向 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
始终为 null
扩展函数 AmazonKinesis.putRecordsWithRetry
将在后台编译为静态函数,Mockito doesn't support static method mocking yet。
因此 Mockito 可能不知道验证步骤中的存根信息,因此会生成默认的 null
值。