1

I am unable to mock AWS translation client due to nested abstract class

AWS Comprehend Code link

Java

public class TestLambdaFunctionHandler implements RequestHandler<InputPayLoadPojo, Response> {

AmazonTranslate awsTranslateClient = null;
AmazonComprehend comprehendClient = null;
awsTranslateClient = AmazonTranslateClientBuilder.standard().build();
comprehendClient = AmazonComprehendClientBuilder.standard().build();
...
} 

Mock Class

@RunWith(PowerMockRunner.class)
@PowerMockIgnore({ "javax.net.ssl.*" })
@PrepareForTest({AmazonComprehendClientBuilder.class, AmazonComprehendClientBuilder , AmazonTranslate.class, AmazonComprehend.class,})
public class SynchronousTest {

    @Before
    public void setup() {
    }

    @Test
    public void testSynchronousTranslation() {
        TaaSSyncLambdaFunctionHandler obj = Mockito.spy(new TaaSSyncLambdaFunctionHandler()); 

        AmazonTranslate awsTransMock = PowerMockito.mock(AmazonTranslate.class);
        AmazonComprehend awsComprehendMock = PowerMockito.mock(AmazonComprehend.class);
        AmazonTranslateClientBuilder awsTranslateClientBuilderMock = PowerMockito.mock(AmazonTranslateClientBuilder.class);
        AmazonComprehendClientBuilder awsComprehendClientBuilderMock = PowerMockito.mock(AmazonComprehendClientBuilder.class);
                                        
        when(awsTranslateClientBuilderMock.standard().build()).thenReturn(awsTransMock);
        when(awsComprehendClientBuilderMock.standard().build()).thenReturn(awsComprehendMock);
    ...
    }
}

Error

com.amazonaws.SdkClientException: Unable to find a region via the region provider chain. Must provide an explicit region in the builder or setup environment to supply a region.
    at com.amazonaws.client.builder.AwsClientBuilder.setRegion(AwsClientBuilder.java:386)
    at com.amazonaws.client.builder.AwsClientBuilder.configureMutableProperties(AwsClientBuilder.java:352)
    at com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:46)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Note: Code is working with proper credentials

I also tried to mock abstract class but I am getting same error.

James Z
  • 12,209
  • 10
  • 24
  • 44
Varun
  • 196
  • 1
  • 20

0 Answers0