java - 我想模拟一个扩展InputStream的专有类,模拟读取,验证关闭

标签 java unit-testing inputstream mockito

我想使用 Mockito 来模拟 AmazonS3 并测试从中打开流 然后在我的代码读取流后验证该流是否已关闭。我还想获取从流中读取的字节。像这样的事情:

AmazonS3 client = mock(AmazonS3.class);
when(tm.getAmazonS3Client()).thenReturn(client);
S3Object response = mock(S3Object.class); 
when(client.getObject(any(GetObjectRequest.class))).thenReturn(response);
S3ObjectInputStream stream = mock(S3ObjectInputStream.class); 
when(response.getObjectContent()).thenReturn(stream);

以某种方式模拟读取方法

MyObject me = new MyObject(client);
byte[] bra me.getBytes(File f, offset, length);
assertEquals(length, bra.length);
verify(stream).close();

最佳答案

您可以使用 Mockito 的 Answer 来模拟流。

    String expectedContents = "Some contents";
    InputStream testInputStream = new StringInputStream(expectedContents);
    S3ObjectInputStream s3ObjectInputStream = mock(S3ObjectInputStream.class);
    S3Object s3Object = mock(S3Object.class);
    AmazonS3Client amazonS3Client = mock(AmazonS3Client.class);
    S3AttachmentsService service = new S3AttachmentsService(amazonS3Client);

    when(s3ObjectInputStream.read(any(byte[].class))).thenAnswer(invocation -> {
        return testInputStream.read(invocation.getArgument(0));
    });

我有一个更广泛的示例 here 。希望有帮助。

关于java - 我想模拟一个扩展InputStream的专有类,模拟读取,验证关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29176631/

相关文章:

objective-c - Cocoa、免费桥接和 ARC

java - 从文本文件导入到 Java 数组

java - MPAndroidChart 如何获取三次折线图上所有点的列表

java - 尝试实现 jcifs 和 UniAddress 并获得 NoClassDefFoundError?

java - 如何制作带有 Cocoa UI 的 Java 应用程序?

java - 使用 for 循环解析 XML 文件

python - 模拟全局变量

php - 如何从 URL 获取字符串

unit-testing - 我可以在我的测试台中捕获模拟器输出到控制台吗?

c# - 在单元测试中预期失败时验证方法调用仍然通过