ご覧頂き、ありがとうございます!
実現したいこと
Amazon S3Clientを利用したソースコードのテストを作成しています。
S3Client.listObjects()の返却値によって、後続処理で分岐している箇所のテストを行いたいですが、どのように返却値を指定すればいいのかわからないためご教授いただければ幸いです。
該当のソースコード
テスト対象クラス
Java
1public class TargetClass { 2 @Autowired 3 private S3Client s3Client; 4 5 public String mainMethod(String bucketName, String prefix) { 6 ListObjectsResponse objectList = listObjects(bucketName, prefix); 7 List<S3Object> s3Object = objectList.contents(); 8 9 if (s3Object.isEmpty()) { 10 return "object is empty"; 11 } else { 12 return "object is NOT empty"; 13 } 14 } 15 16 private ListObjectsResponse listObjects(String bucketName, String prefix) { 17 ListObjectsRequest listObjectsRequest = ListObjectsRequest 18 .builder() 19 .bucket(bucketName) 20 .prefix(prefix) 21 .build(); 22 23 LOGGER.info("List file from S3 for prefix: {}/{}", bucketName, prefix); 24 try { 25 return s3Client.listObjects(listObjectsRequest); 26 } catch (SdkServiceException ase) { 27 LOGGER 28 .error( 29 "List file request for prefix: {}, was rejected with an error", 30 prefix); 31 throw new CustomException(ase); 32 } catch (SdkClientException ace) { 33 LOGGER 34 .error( 35 "Client encountered an internal error while trying to communicate with STaaS for list file request with prefix {}", 36 prefix); 37 throw new CustomException(ase); 38 } 39 } 40}
テストクラス
Java
1@RunWith(PowerMockRunner.class) 2public class TestTargetClass { 3 4 @Mock 5 S3Client s3ClientMock; 6 7 @InjectMocks 8 TargetClass _target; 9 10 @Test 11 public void test1() throws Exception { 12 // S3Object がEmptyの場合 13 String bucketName = "bucketName"; 14 String prefix = "prefix"; 15 16 when(s3ClientMock.listObjects(any())).thenReturn(); // contentsがnullのListObjectsResponseを生成して返却したい 17 String actual = _target.mainMethod(bucketName, prefix); 18 19 assertThat(actual, is("object is empty"); 20 } 21 22 @Test 23 public void test2() throws Exception { 24 // S3Object がEmptyではない場合 25 String bucketName = "bucketName"; 26 String prefix = "prefix"; 27 28 when(s3ClientMock.listObjects(any())).thenReturn(); // contentsがnullではないListObjectsResponseを生成して返却したい 29 String actual = _target.mainMethod(bucketName, prefix); 30 31 assertThat(actual, is("object is Not empty"); 32 } 33}
試したこと
Java
1/** 2* ListObjectsResponseをinstance化 3*/ 4ListObjectsResponse response = new ListObjectsResponse(); 5// 'ListObjectsResponse(software.amazon.awssdk.services.s3.model.ListObjectsResponse.BuilderImpl)' has private access in 'software.amazon.awssdk.services.s3.model.ListObjectsResponse'

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/02/09 00:17
2023/02/09 00:47
2023/02/09 02:46