模拟内置类AWS Logs客户端构建器

时间:2019-04-28 18:54:54

标签: java unit-testing junit mockito powermock

我正在尝试模拟并使用AWS内置类。但是不断出现不同的错误。

虽然我正在测试一个完整的方法,但我能够模拟所有其他方法,但是当涉及到凭据形成时,when也会引发异常。

 BasicAWSCredentials basic = new BasicAWSCredentials(clientToken, clientSecret);
  //Forming AWSLogs
 AWSLogs awsLogsClient = AWSLogsClientBuilder
            .standard()
            .withCredentials(new AWSStaticCredentialsProvider(basic))
            .withRegion(region)
            .build();

 DescribeLogStreamsRequest logStreamsRequest = new 
 DescribeLogStreamsRequest().withLogGroupName("SomeLogGroupName");

 //This is where I am getting error while mocking. But this same exectes properly while running with actual credentilas. But while mocking it fails       
 DescribeLogStreamsResult describeLogStreamsResult = awsLogsClient.describeLogStreams(logStreamsRequest);

执行Junit模拟测试时出现错误消息。

Caused by: com.amazonaws.services.logs.model.UnrecognizedClientException: The security token included in the request is invalid. (Service: AWSLogs; Status Code: 400; Error Code: UnrecognizedClientException; Request ID:

因此,如果仅针对上述代码创建Mockito测试,将很有帮助。我对Mockito完全陌生

1 个答案:

答案 0 :(得分:0)

由于您正在编写单元测试,因此您不想使用awsLogsClient进行真正的http调用,而是希望为该客户端创建一个模拟,以便您可以控制返回的响应。这样,您可以测试您的代码是否成功。这样做的另一个好处是,您的单元测试将在没有Internet连接的情况下执行得更快。

我将从模拟接口开始: https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/logs/AWSLogs.html

但是您将需要某种机制来将这种依赖性注入到您的生产代码中。