【问题标题】:Mockito Mock response based on string argument基于字符串参数的 Mockito 模拟响应
【发布时间】:2018-11-09 20:54:47
【问题描述】:

我需要从 com.amazonaws.services.s3 库中模拟 amazonS3.getObject(GetObjectRequest, File),以测试我自己的从中获取文件的方法。

我需要一项测试,其中找到了所请求的对象并且一切正常,以及一项在 S3 中未找到文件的测试,然后返回将返回 null。

所以简单的情况是这样的:

ObjectMetadata objectMetadata = new ObjectMetadata();

Mockito.lenient().when(amazonS3.getObject(any(GetObjectRequest.class), any(File.class))).thenReturn(objectMetadata);

我如何复制和修改它以允许根据对象输入进行不同的返回?

在函数本身中,这就是作为 GetObjectRequest 提供的内容:

GetObjectRequest getObjectRequest = new GetObjectRequest(this.getBucketName(), objectKey);

所以我们需要将any(GetObjectRequest.class) 更改为能够区分objectKey(字符串)为“X”的对象和objectKey 为“Y”的另一个调用,在这种情况下,我想返回null 以进行全面测试我的功能。

我希望问题很清楚?

【问题讨论】:

    标签: java mockito


    【解决方案1】:

    我希望我理解正确。

    如果有帮助,你可以试试

    when(amazonS3.getObject(any(GetObjectRequest.class),any(File.class)))
    .thenReturn(objectMetadata)
    .thenReturn(null); 
    

    第一次调用应该返回您的 objectMetadata,第二次返回 null。

    【讨论】:

    • 嗯,只有在相同的测试方法中使用才会起作用,否则无法保证测试方法的执行顺序。我希望使用两种单独的测试方法来做到这一点,因此我的问题是如何使用不同的参数值为每次调用设置不同的返回
    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 2010-11-07
    • 2021-01-07
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多