如何使用mockito模拟AmazonS3的getObject方法



我正在尝试使用Mockito模拟Java中的AmazonS3 getObject方法。但是嘲笑是不正常的。它仍然会从S3中检索文件。有人能帮我解决这个问题吗?

AmazonS3 s3client = AmazonS3ClientBuilder
.standard()
.withRegion(Regions.US_EAST_1)
.build();
S3Object object = s3client.getObject(new GetObjectRequest(bucketName, keyName));
if (object == null) {
throw new Exception("Object returned from S3 is null");
}
HashMap<String, String> s3Map = new HashMap<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(object.getObjectContent()));

Test.java

@BeforeEach
public void setup() throws Exception {
MockitoAnnotations.initMocks(this);
String property = "environment=dev";
InputStream testInputStream = new StringInputStream(property);
AmazonS3ClientBuilder amazonS3ClientBuilder = Mockito.mock(AmazonS3ClientBuilder.class);
AmazonS3Client amazonS3Client = Mockito.mock(AmazonS3Client.class);
Mockito.when(amazonS3ClientBuilder.build()).thenReturn(amazonS3Client);
S3ObjectInputStream s3ObjectInputStream = Mockito.mock(S3ObjectInputStream.class);
S3Object s3Object = new S3Object();
s3Object.setObjectContent(testInputStream);
Mockito.when(amazonS3Client.getObject(ArgumentMatchers.any())).thenReturn(s3Object);
}
@Test
void testGetTemplateAndSplit() throws Exception {
// Setup
String property = "header<body>body</body>trailer";
InputStream testInputStream = new StringInputStream(property);
S3Object s3Object = new S3Object();
s3Object.setObjectContent(testInputStream);
when(amazonS3Client.getObject("bucketName","templatePath")).thenReturn(s3Object);
// Run the test
S3ObjectInputStream s3ObjectInputStream =amazonS3Client.getObject("bucketName","templatePath").getObjectContent();
final Boolean result = getTemplateServiceImplUnderTest.getTemplateAndSplit("templatePath", "bucketName",
"reportType", "merchantName");
// Verify the results
assertThat(result).isFalse();

这对我有效。不要介意布尔值为false。am调用的函数应该为我返回一个false。希望它能有所帮助!