代码之家  ›  专栏  ›  技术社区  ›  David Karlsson

单元测试扩展函数和模仿类的其他方法

  •  0
  • David Karlsson  · 技术社区  · 6 年前

    我正在编写一个扩展函数,其中添加了一些重试功能 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 回复  |  直到 6 年前
        1
  •  0
  •   jaychang0917    6 年前

    AmazonKinesis.putRecordsWithRetry 将编译成静态函数下罩,并进行Mockito doesn't support static method mocking yet .

    null 创造价值。