java 未找到thenReturn的合适方法

dm7nw8vv  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(185)

我是java和mockito的新手,试图嘲笑我的

//kinesisClient is of type KinesisAsyncClient
PutRecordResponse result = kinesisClient.putRecord(putRecordRequest).get();

如下所示:

KinesisAsyncClient kinesisClient = mock(KinesisAsyncClient.class);
PutRecordResult res = mock(PutRecordResult.class);
res.setShardId("shard-12345");
when(kinesisClient.putRecord(any()).get())
                .thenReturn(res);

它在给

error: no suitable method found for thenReturn(PutRecordResult)
.thenReturn(res);

我试过了

KinesisAsyncClient kinesisClient = mock(KinesisAsyncClient.class);
final PutRecordResult res = new PutRecordResult();
res.setShardId("shard-12345");
when(kinesisClient.putRecord(any()).get())
                .thenReturn(res);

但是同样的错误。我不确定我在这里做错了什么。有人能帮我吗?

9udxz4iz

9udxz4iz1#

此错误的原因是thenReturn方法需要一个PutRecordResponse对象,但您传入的是一个PutRecordResult对象。
要修复此错误,应创建一个PutRecordResponse对象并将其sequenceNumber和shardId字段设置为适当的值,然后在thenReturn方法中使用该对象,如下所示:

KinesisAsyncClient kinesisClient = mock(KinesisAsyncClient.class);
PutRecordResponse res = mock(PutRecordResponse.class);
when(res.getSequenceNumber()).thenReturn("12345");
when(res.getShardId()).thenReturn("shard-12345");
when(kinesisClient.putRecord(any())).thenReturn([PutRecordResponse type]);

// Call the method that uses the mocked KinesisAsyncClient

在这里,我们模拟了PutRecordResponse对象,并将其sequenceNumber和shardId字段设置为适当的值,然后,我们使用thenReturn方法返回一个CompletableFuture,当在模拟的KinesisAsyncClient上调用putRecord方法时,该CompletableFuture以模拟的PutRecordResponse对象完成。

相关问题